webentwicklung-frage-antwort-db.com.de

DynamoDB vs MongoDB NoSQL

Ich versuche herauszufinden, was ich für ein zukünftiges Projekt verwenden kann. Wir planen, im ersten Jahr ca. 500.000 Datensätze pro Monat zu speichern. Für die nächsten Jahre ist dies möglicherweise eine vertikale Anwendung datenbank aus diesem grund habe ich mich für einen noSQL datenspeicher entschieden.

Die erste Option, die mir in den Sinn kam, war mongo db, da es sich um ein sehr ausgereiftes Produkt handelt, das von der Community sehr unterstützt wird. Andererseits haben wir ein brandneues Produkt, das einen verwalteten Service mit höchster Leistung bietet. Ich werde dies weiterentwickeln Anwendung, aber es gibt keinen Wartungsplan (zumindest für den Moment), daher denke ich, dass dies ein großer Vorteil sein wird, da Amazon eine elastische Art der Skalierung bietet.

Mein Hauptanliegen ist die Abfragestruktur. Ich habe mich noch nicht mit den Abfragemöglichkeiten von dynamoDB befasst. Da es sich jedoch um einen k/v-Datenspeicher handelt, bin ich der Meinung, dass dieser eingeschränkter sein könnte als der von mongo db.

Wenn jemand die Erfahrung hat, ein Projekt von mongoDB nach DynamoDB zu verschieben, wird jeder Ratschlag voll und ganz geschätzt.

157
jack.the.ripper

Ich habe kürzlich meine MongoDB auf DynamoDB migriert und 3 Blogs geschrieben, um Erfahrungen und Daten über Leistung und Kosten auszutauschen.

Von MongoDB nach AWS DynamoDB + SimpleDB migrieren

7 Gründe, warum Sie MongoDB über DynamoDB verwenden sollten

Gründe, warum Sie DynamoDB über MongoDB verwenden sollten

55
Mason Zhang

Ich weiß, dass dies alt ist, aber es kommt immer noch auf, wenn Sie nach dem Vergleich suchen. Wir haben Mongo verwendet und sind fast ausschließlich zu Dynamo gewechselt, was jetzt unsere erste Wahl ist. Nicht weil es mehr Funktionen hat, tut es nicht. Mongo hat eine bessere Abfragesprache, man kann innerhalb einer Struktur indizieren, es gibt viele Kleinigkeiten. Die Überlegenheit von Dynamo liegt in dem, was das OP in seinem Kommentar feststellte: Es ist einfach. Sie müssen sich nicht um Server kümmern. Wenn Sie beginnen, eine Mongo-Lösung einzurichten, wird dies kompliziert. Sie können zu einem der Hosting-Unternehmen gehen, aber das ist auch nicht billig. Wenn Sie mit Dynamo mehr Durchsatz benötigen, klicken Sie einfach auf eine Schaltfläche. Sie können Skripte schreiben, die automatisch skaliert werden. Wenn Dynamo aktualisiert werden muss, ist dies für Sie erledigt. Das ist alles viel kostbarer Stress und Zeit, die nicht ausgegeben wird. Wenn Sie keine engagierten Mitarbeiter haben, ist Dynamo hervorragend.

Wir gehen jetzt also standardmäßig auf Dynamo. Mongo vielleicht, wenn die Datenstruktur kompliziert genug ist, um es zu rechtfertigen, aber dann würden wir wahrscheinlich auf eine SQL-Datenbank zurückgreifen. Dynamo ist stumpf, Sie müssen wirklich darüber nachdenken, wie Sie es erstellen werden, und wahrscheinlich werden Sie Redis in Elasticcache verwenden, damit es für komplexe Dinge funktioniert. Aber es ist sicher schön, sich nicht darum kümmern zu müssen. Sie codieren. Das ist es.

159
CargoMeister

Bei 500.000 Dokumenten gibt es keinen Grund, überhaupt zu skalieren. Ein typischer Laptop mit einer SSD und 8 GB RAM kann problemlos 10 Millionen Datensätze aufnehmen. Wenn Sie also aufgrund der Skalierung eine Auswahl treffen möchten, spielt dies keine Rolle. Ich würde vorschlagen, dass Sie auswählen, was Ihnen am besten gefällt und wo Sie den meisten Online-Support finden.

56
Derick

Für einen schnellen Überblick mag ich diese Website, die viele Vergleichsseiten enthält, sehr. ZB AWS DynamoDB vs MongoDB; http://db-engines.com/de/system/Amazon+DynamoDB%3BMongoDB

21
AnneTheAgile

Kurze Antwort: Beginnen Sie mit SQL und fügen Sie NoSQL nur bei Bedarf hinzu. (es sei denn, Sie benötigen nichts anderes als sehr einfache Abfragen)

Meine persönliche Erfahrung: Ich habe MongoDB nicht für Abfragen verwendet, aber seit April 2015 ist DynamoDB immer noch sehr verkrüppelt, wenn es um alles geht, was über die grundlegendsten Schlüssel-/Wertabfragen hinausgeht. Ich liebe es für die grundlegenden Dinge, aber wenn Sie Abfragesprache wollen, dann suchen Sie nach einer echten SQL-Datenbanklösung.

In DynamoDB können Sie nach einem Hash oder einem Hash- und Bereichsschlüssel abfragen und Sie können mehrere sekundäre globale Indizes haben. Ich führe Abfragen in einer einzelnen Tabelle mit 4 möglichen Filterparametern durch und sortiere die Ergebnisse. Dies wird (kaum) durch die Verwendung der globalen Sekundärindizes mit Filterausdrücken unterstützt. Das Problem tritt auf, wenn Sie versuchen, die mit dem Filter übereinstimmenden Gesamtergebnisse zu erhalten. Sie können nicht nur nach den ersten 10 mit dem Filter übereinstimmenden Elementen suchen, sondern es werden 10 Elemente überprüft. Das Scannen über die Taste "Continue" verursacht Nackenschmerzen und beansprucht für ein einfaches Szenario zu viel Lesekontingent für Ihre Tabelle.

Um genau zu sein, was das Limit-Problem mit Filtern in der Abfrage angeht, ist dies aus den Dokumenten ( http://docs.aws.Amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#ScanQueryLimit ). :

 In einer Antwort gibt DynamoDB alle Übereinstimmungsergebnisse innerhalb des Bereichs des Grenzwerts zurück. Wenn Sie beispielsweise eine Abfrage 
 Oder eine Scananforderung mit einem Grenzwert von 6 und ohne einen Filter 
 Ausgeben, gibt die Operation die ersten sechs Elemente in der Tabelle 
 Zurück, die stimmen mit den Anforderungsparametern überein. Wenn Sie auch einen 
 FilterExpression angeben, gibt der Vorgang die Elemente innerhalb der 
 Ersten sechs Elemente in der Tabelle zurück, die den Filteranforderungen entsprechen. 

Mein Fazit ist, dass Abfragen mit FilterExpressions nur in sehr seltenen Fällen verwendet und nicht skaliert werden können, da jede Abfrage den größten Teil oder die gesamte Tabelle Ihrer Tabelle lesen kann, für die viel zu viele DynamoDB-Leseeinheiten erforderlich sind. Wenn Sie zu viele Leseeinheiten verwenden, werden Sie gedrosselt und sehen eine schlechte Leistung.

Expertenmeinung: Auf dem AWS-Gipfel am 9. April 2015 sprach sich Brett Hollman, Manager, Solutions Architecture, AWS in seinem Vortrag über das Scalling an Ihre ersten 10 Millionen Benutzer dafür aus, mit einer SQL-Datenbank zu beginnen und NoSQL nur dann zu verwenden, wenn und wenn es sinnvoll ist. Denn früher oder später benötigen Sie wahrscheinlich irgendwo in Ihrem Stapel einen SQL-Server. Seine Folien sind hier: http://www.slideshare.net/AmazonWebServices/deep-dive-scaling-up-to-your-first-10-million-users Siehe Folie 28.

16
Deemoe

Wir haben eine Kombination aus Mongo/Dynamo für ein Gesundheitsprodukt ausgewählt. Grundsätzlich ermöglicht Mongo eine bessere Suche, aber der gehostete Dynamo ist großartig, da er HIPAA-kompatibel ist, ohne dass zusätzliche Arbeit anfällt. Wir hosten also den Mongo-Teil ohne personenbezogene Daten in einem Standard-Setup und ermöglichen Amazon, den HIPAA-Teil in Bezug auf die Infrastruktur zu behandeln. Wir können bestimmte Elemente von Mongo abfragen, die Dokumente mit Zeigern (IDs) des relatierbaren Dynamo-Dokuments aufrufen.

Der Hauptgrund, warum wir uns dafür entschieden haben, Mongo zu verwenden, anstatt die gesamte Anwendung auf Dynamo zu hosten, waren zwei Gründe. Erstens mussten wir ortsbezogene Suchvorgänge durchführen, bei denen Mongo zu der Zeit großartig war, bei Dynamo jedoch nicht, aber sie haben jetzt eine Option.

Zweitens waren einige Dokumente unstrukturiert und wir wussten nicht im Voraus, wie die Daten lauten würden. Nehmen wir beispielsweise an, Benutzer a gibt ein Dokument in der Auflistung "form" wie folgt ein: {"username": "user1", " email ":" [email protected] "}. Und ein anderer Benutzer legt dies in derselben Sammlung ab: {"phone": "813-555-3333", "location": [28.1234, -83.2342]}. Mit mongo können wir diese dynamischen und unbekannten Felder jederzeit durchsuchen. Mit Dynamo können Sie dies tun, müssen jedoch jedes Mal einen Index erstellen, wenn ein neues Feld hinzugefügt wird, das durchsucht werden soll. Wenn Sie also noch nie ein Telefonfeld in Ihrem Dynamo-Dokument gehabt haben und dann plötzlich, fügt jemand es hinzu, es ist völlig unrecherchbar.

Dies bringt nun einen weiteren Punkt auf den Sie hingewiesen haben. Manchmal bedeutet die Auswahl der richtigen Lösung für den Job nicht immer, das beste Produkt für den Job auszuwählen. Beispielsweise haben Sie möglicherweise einen Kunden, der das von Ihnen erstellte System über 10 Jahre lang benötigt und verwenden wird. Die Entscheidung für eine SaaS/IaaS-Lösung, die gut genug ist, um die Arbeit zu erledigen, ist möglicherweise eine bessere Option, da Sie sich darauf verlassen können, dass Amazon die Systeme über einen langen Zeitraum gewartet und gewartet hat.

14
Steffan Perry

Ich habe an beiden gearbeitet und bin ein Fan von beiden.

Aber Sie müssen verstehen, wann Sie was und zu welchem ​​Zweck verwenden müssen.

Ich denke nicht, dass es eine gute Idee ist, Ihre gesamte Datenbank in DynamoDB zu verschieben, da das Abfragen schwierig ist, außer bei Primär- und Sekundärschlüsseln. Die Indizierung ist begrenzt und das Scannen in DynamoDB schmerzhaft.

Ich würde mich für eine hybride Art von Datenbank entscheiden, bei der umfangreiche abfragbare Daten vorhanden sein sollten. Es gibt MongoDB mit all seinen Funktionen, die Sie niemals für Verbesserungen oder Modifikationen halten würden.

DynamoDB ist blitzschnell (schneller als MongoDB), daher wird DynamoDB häufig als Alternative zu Sitzungen in skalierbaren Anwendungen verwendet. In den Best Practices von DynamoDB wird außerdem empfohlen, Daten, die weniger häufig verwendet werden, in eine andere Tabelle zu verschieben.

Angenommen, Sie haben Artikel oder Feeds. Die Leute suchen eher nach Sachen von letzter Woche oder von diesem Monat. Es ist sehr selten, dass Leute Daten von zwei Jahren besuchen. Zu diesem Zweck speichert DynamoDB Daten vorzugsweise nach Monat oder Jahren in verschiedenen Tabellen.

DynamoDB ist nahtlos skalierbar, was Sie in MongoDB manuell tun müssen. Sie würden jedoch an Leistung verlieren, wenn Sie die Durchsatzpartition und die Funktionsweise der Skalierung hinter den Kulissen nicht kennen.

DynamoDB sollte verwendet werden, wenn Geschwindigkeit entscheidend ist, MongoDB dagegen zu viele Hände und Funktionen hat, was DynamoDB fehlt.

sie können beispielsweise einen Replikat-Satz von MongoDB so haben, dass eines der Replikate eine Dateninstanz mit einem Alter von 8 (oder was auch immer) Stunden enthält. Wirklich nützlich, wenn Sie in Ihrer Datenbank etwas Großes durcheinander gebracht haben und die Daten so erhalten möchten, wie sie vorher waren.

Das ist allerdings meine Meinung.

8
Rahul Kumar

Denken Sie daran, ich habe nur mit MongoDB experimentiert ...

Nach dem, was ich gelesen habe, hat DynamoDB in Bezug auf Funktionen einen langen Weg zurückgelegt. Früher war es ein Super-Basic-Schlüsselwertspeicher mit äußerst eingeschränkten Speicher- und Abfragefunktionen. Es ist seitdem gewachsen und unterstützt jetzt größere Dokumente + JSON-Unterstützung und globale Sekundärindizes . Die Lücke zwischen den Features von DynamoDB und MongoDB wird mit jedem Monat kleiner. Die neuen Funktionen von DynamoDB werden am hier erweitert.

Viele der Vergleiche zwischen MongoDB und DynamoDB sind aufgrund der kürzlich hinzugefügten DynamoDB-Funktionen veraltet. Jedoch bietet dieser Beitrag einige andere überzeugende Punkte, um DynamoDB zu wählen, nämlich dass es einfach, wartungsarm und oft kostengünstig ist. Eine weitere Diskussion hier der Datenbankauswahl war interessant zu lesen, wenn auch etwas alt.

Zum Mitnehmen: Wenn Sie ernsthafte Datenbankabfragen durchführen oder in Sprachen arbeiten, die von DynamoDB nicht unterstützt werden, verwenden Sie MongoDB. Andernfalls bleiben Sie bei DynamoDB.

7
AndrewSouthpaw