Frage

Ich dachte, dass ich SimpleDB verwenden könnte, um den anspruchsvollsten Bereich meiner Anwendung (was die Skalierung betrifft) zu bewältigen – Twitter-ähnliche Kommentare, aber mit der Position oben –, bis ich mich hinsetzte, um tatsächlich mit der Implementierung zu beginnen SDB.

Erstens hat SDB eine Beschränkung von 1000 Byte pro Attributwert, was selbst für Kommentare nicht ausreicht (wahrscheinlich müssen längere Werte in mehrere Attribute aufgeteilt werden).

Dann beträgt die maximale Domänengröße 10 GB.Das Versprechen war, dass Sie skalieren können, ohne sich Gedanken über Datenbank-Sharding usw. machen zu müssen, da SDB mit zunehmender Datenmenge nicht schlechter wird.Aber wenn ich das richtig verstehe, hätte ich bei Domains genau das gleiche Problem wie beim Sharding, d.h.Irgendwann muss die Verteilung und Abfrage von Datensätzen über Domänen hinweg auf Anwendungsebene implementiert werden.

Selbst für die einfachsten Objekte, die ich in der gesamten Anwendung habe, d. h.Bei atomaren Benutzerbewertungen ist SDB keine Option, da innerhalb der Abfrage kein Durchschnitt berechnet werden kann (alles basiert auf Zeichenfolgen).Um also die durchschnittliche Benutzerbewertung für ein Objekt zu berechnen, müsste ich alle Datensätze laden – 250 auf einmal – und sie auf Anwendungsebene berechnen.

Vermisse ich etwas über SDB?Sind 10 GB wirklich eine so große Datenbank, um alle SDB-Einschränkungen zu überwinden?Ich war ehrlich gesagt begeistert von der Nutzung von SDB, da ich bereits S3 und EC2 verwende, aber jetzt sehe ich einfach keinen Anwendungsfall.

War es hilfreich?

Lösung

Ich benutze SDB auf ein paar großen ish-Anwendungen. Die 10-GB-Grenze pro Domain nicht beunruhigt mich, aber wir sind Glücksspiele auf Amazon ermöglichen diese verlängert werden, wenn wir es brauchen. Sie haben eine Anfrage auf ihrer Website, wenn Sie mehr Platz haben wollen.

Was Cross-Domain verbindet, denken Sie nicht als eine traditionelle Datenbank SDB. Während der Migration meiner Daten zu SDB, hatte ich etwas davon denormalize so konnte ich manuell die Cross-Domain verbindet.

Das 1000 Byte pro Attribut Einschränkung war hart auch zu umgehen. Eine der Anwendungen, die ich habe, ist ein Blog-Service, die Beiträge und Kommentare in der Datenbank gespeichert sind. Während es über zu SDB Portierung, lief ich in diese Einschränkung. Ich beenden die Beiträge und Kommentare als Dateien in S3 Speicher auf und las, dass in meinem Code. Da diese Server auf EC2 ist, wird der Verkehr bis S3 nicht kostet nichts extra.

Vielleicht eine der anderen Probleme zu achten gilt die Eventual Consistency-Modell auf SDB ist. Sie können keine Daten schreiben und es dann mit jeder Garantie zurücklesen, dass die neu geschriebenen Daten an Sie zurückgeschickt werden. Schließlich werden die Daten aktualisiert.

All dies sagte, habe ich noch SDB lieben. Ich bereue es nicht zu wechseln. Ich zog aus einer SQL 2005 Server. Ich glaube, ich mit SQL viel mehr Kontrolle hatte, aber einmal, dass die Kontrolle aufzugeben, ich mehr Flexibilität haben. Nicht um das Schema vordefinieren ist genial. Mit einer starken und robusten Caching-Schicht in Ihrem Code, ist es einfach SDB flexibler zu machen.

Andere Tipps

Ich habe ungefähr 50 GB in SimpleDB, sharded über 30 Domains. Ich benutze dies in S3 gespeichert mehr Schlüssel auf Objekte zu ermöglichen, und auch meine S3 Kosten zu senken. Ich habe nicht mit der Verwendung von SimpleDB für Volltextsuche gespielt, aber ich würde es nicht versuchen.

SimpleDB arbeitet, ist es einfach, und so weiter, aber es ist nicht der richtige Satz von Funktionen für jede Situation. In Ihrem Fall, wenn Sie die Aggregation benötigen, ist SimpleDB nicht die richtige Lösung. Es ist rund um die Schule des Denkens gebaut, dass die DB nur ein Schlüsselwertspeicher ist, und die Aggregation sollte von einem Aggregationsprozess gehandhabt wird, dass die Ergebnisse zurück an den Schlüsselwertspeicher schreibt. Das ist genau das, was gebraucht wird für einige Anwendungen.

Hier eine Beschreibung, wie ich kneifen Pfennige SimpleDB mit

Es ist hinzuzufügen, dass, während mit Ihrer eigenen sharding Logik über mehrere Domains zu schreiben ist nicht ideal, ist es in Bezug auf Leistung. Wenn zum Beispiel müssen Sie über 100 GB Daten suchen, ist es besser, 20 Maschinen zu fragen, halten jeweils 5 GB die gleiche Suche auf dem Abschnitt auszuführen für die sie verantwortlich sind, eher als eine Maschine der gesamte Aufgabe durchführen zu müssen. Wenn Ihr Ziel mit einer sortierten Liste am Ende ist, können Sie die besten Ergebnisse aus den 20 gleichzeitige Abfragen zurücknehmen und sammeln sie auf der Maschine die Anfrage initiiert wird.

Das heißt, würde ich lieber mag diese aus dem normalen Gebrauch abstrahiert, um zu sehen und haben so etwas wie „Hinweise“ in der API, wenn Sie auf niedrigerer Ebene erhalten möchten. Wenn Sie also 100 GB an Daten speichern passieren, lassen Sie Amazon entscheiden, ob es über 20 Maschinen aufgeteilt ist oder 10 oder 40, und die Arbeit zu verteilen. Zum Beispiel in Googles BigTable Design, wie eine Tabelle in 400mb Tabletten kontinuierlich partitioniert es wächst. Die Bitte um eine Zeile aus einer Tabelle ist so einfach wie das, und BigTable macht den Job, herauszufinden, wo in der einer Tablette oder Millionen von Tabletten sie lebt.

Dann wieder BigTable erfordert, dass Sie MapReduce schreiben ruft eine Abfrage durchzuführen, während SimpleDB Indizes sich dynamisch für Sie, damit Sie einige gewinnen, einige verlieren.

Wenn die Speichergröße pro Attribut ist das Problem, das Sie S3 verwenden können größere Daten zu speichern, und speichern Sie die Links zu den s3 Objekten in SDB. S3 ist nicht nur für Dateien, es ist eine generische Speicherlösung.

Amazon versucht, Ihnen eine einfache Objektdatenbank zu implementieren zu erhalten. Dies ist in erster Linie aus Geschwindigkeitsgründen. Man denke an die SimpleDB Datensätze als Zeiger / Schlüssel zu einem Element in S3 sein. Auf diese Weise können Abfragen ausführen können (langsam gegen SimpleDB Ergebnislisten zu erhalten, oder Sie können S3 direkt getroffen mit einem Schlüssel (schnell), um das Objekt zu ziehen, wenn Sie abrufen müssen oder Ändern von Datensätzen ein-at-a-time.

Die Grenzen scheinen für den Strom zu gelten Beta freigeben.Ich gehe davon aus, dass sie in Zukunft größere Datenbanken zulassen werden, sobald sie herausgefunden haben, wie sie die Nachfrage wirtschaftlich bedienen können.Trotz dieser Einschränkungen ist eine Datenbank mit 10 GB, die eine hohe Skalierbarkeit und Zuverlässigkeit unterstützt, eine nützliche und kostengünstige Ressource.

Beachten Sie, dass sich Skalierbarkeit auf die Fähigkeit bezieht, a beizubehalten stetige und flache Leistungskurve, während das Datenvolumen bzw. die Anzahl der Anfragen wächst.Dies bedeutet nicht unbedingt eine optimale Leistung und auch nicht eine Datenspeicherung mit sehr hoher Kapazität.

Amazon SimpleDB bietet auch eine kostenlose Servicestufe, sodass Sie bis zu 1 GB speichern und bis zu 1 GB/Monat übertragen können, wobei Sie bis zu 25 Stunden Maschinenzeit verbrauchen.Obwohl diese Grenze sehr niedrig klingt, ermöglicht die Tatsache, dass sie kostenlos ist, einigen kleineren Kunden die Nutzung der Technologie, ohne in eine große Serverfarm investieren zu müssen.

Ich baue eine commericial .NET-Anwendung, die SimpleDB als primäre Datenspeicher verwenden. Ich bin noch nicht in der Produktion, aber ich habe auch eine Open-Source-Bibliothek, die einige der Fragen behandelt werden mit der Verwendung von SimpleDB vs einem RDBS Aufbau geführt. Einige der Funktionen sind auf meinem Fahrplan beziehen sich auf die Probleme, die Sie erwähnt haben:

  • Transparente Partitionierung von Daten
  • Pseudo Transaktionalität
  • Transparent Spanning von Attributen übertreffen die 1000 Byte-Grenze

SimpleDB ist noch aktiv weiterentwickelt und wird sicherlich mit vielen Funktionen am Ende es heute nicht hat (einige mit dem Core-System hinzugefügt und einig in den Code-Bibliotheken).

Die .NET-Bibliothek ist Einfache Savant .

Ich kaufe nicht die ganze Hype um SimpleDB und basierend auf den folgenden Einschränkungen keinen Grund sehen, warum es verwendet werden soll (Ich verstehe, dass Sie jetzt mit fast jeder Technologie fast alles bauen können, aber das ist nicht der Grund, auswählen).

So die Einschränkungen ich gesehen habe:

  • kann nur auf Amazon AWS ausgeführt werden, sollten Sie auch zahlen für eine ganze Reihe von Personal
  • maximale Größe der Domäne (Tabelle) beträgt 10 GB
  • Attributwertlänge (Größe des Feldes) ist 1024 Bytes
  • maximale Elemente in ausgewählter Antwort - 2500
  • maximale Antwortgröße auswählen (die maximale Datenmenge, die Sie zurückkommen können) - 1 MB, tatsächlich können Sie überprüfen, alle Einschränkungen hier
  • Treiber nur für href="http://docs.aws.amazon.com/AmazonSimpleDB/latest/DeveloperGuide/AWSLibraries.html" einige Sprachen (java, pHP, python, ruby, .net)
  • erlaubt keine Groß- und Kleinschreibung suchen. Sie müssen zusätzliche Kleinfeld / Anwendungslogik einzuführen.
  • Sortierung kann nur auf einem Feld
  • wegen 5s time Zählung in fremde verhalten. Wenn 5 Sekunden vergangen und die Abfrage nicht abgeschlossen ist, beenden Sie mit einer Teilnummer und ein Token auf, die Sie Abfrage weiterhin erlaubt. Anwendungslogik ist verantwortlich für das Sammeln aller dieser Daten eine Zusammenfassung.
  • alles ist ein UTF-8-String , das macht es ist ein Schmerz in den Arsch mit nicht String-Werten zu arbeiten (wie Zahlen, Daten).
  • Sortierung verhält sich für Zahlen seltsam (aufgrund der Tatsache, dass alles, was ein String). So, jetzt müssen Sie mit Polsterung schamanischen Tanz tun
  • beide haben keine Transaktionen und verbindet
  • keine Verbindung, geostatische, mehrere Spaltenindizes, keine Fremdschlüssel

Ist dies nicht genug ist, dann haben Sie auch über die grundlegenden Dinge wie group by, sum average, distinct sowie Datenmanipulation zu vergessen. In Ganzen ist die Abfragesprache ziemlich rudimentär und erinnert eine kleine Teilmenge von dem, was SQL tun kann.

So ist die Funktionalität ist nicht wirklich Art und Weise reicher als Redis / Memcached, aber ich bezweifle sehr, dass es so gut wie diese beiden dbs für ihre Anwendungsfälle führt.

SimpleDB Position selbst als Schema lose Dokumentenbasis nosql Datenbank aber die Abfragesyntax von MongoDB / CounchDB ist viel mehr Ausdruckskraft und ihre Grenzen sind viel mehr zumutbar ist.

Und endlich - vergessen Sie nicht über Anbieter Sperren . Wenn in ein paar Jahren Azure (oder etwas anderes, das scheint) eine Wolke liefert Hosting-5-mal billiger als AWS, wäre es wirklich schwer zu wechseln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top