Ich prüfe, was die beste Migrationsoption sein könnte.
Derzeit bin ich auf einer Sharded MySQL (horizontale Partition), wobei die meisten meiner Daten in JSON-Blobs gespeichert sind. Ich habe keine komplexen SQL-Abfragen (die bereits nach der Partitionierung meiner Datenbank weg migriert wurden).
Im Moment scheinen sowohl MongoDB als auch Cassandra Optionen zu sein. Meine Situation:
- Viele Lesevorgänge in jeder Abfrage, weniger regelmäßige Schreibvorgänge
- Keine Sorge um "massive" Skalierbarkeit
- Mehr Sorge um einfache Einrichtung, Wartung und Code
- Minimieren Sie die Hardware- / Serverkosten
mongodb
database-design
cassandra
database
ming yeow
quelle
quelle
Antworten:
Viele Lesevorgänge in jeder Abfrage, weniger regelmäßige Schreibvorgänge
Beide Datenbanken funktionieren gut bei Lesevorgängen, bei denen der Hot-Datensatz in den Speicher passt. Beide betonen auch Datenmodelle ohne Verknüpfung (und fördern stattdessen die Denormalisierung), und beide stellen Indizes für Dokumente oder Zeilen bereit , obwohl die Indizes von MongoDB derzeit flexibler sind.
Die Speicher-Engine von Cassandra bietet Schreibvorgänge mit konstanter Zeit, unabhängig davon, wie groß Ihr Datensatz wird. Schreibvorgänge sind in MongoDB problematischer, teilweise aufgrund der B-Tree-basierten Speicher-Engine, aber mehr aufgrund der Multi-Granularity-Sperre .
Für die Analyse bietet MongoDB eine benutzerdefinierte Map / Reduce-Implementierung. Cassandra bietet native Hadoop-Unterstützung, einschließlich für Hive (ein SQL-Data-Warehouse, das auf Hadoop Map / Reduce basiert ) und Pig (eine Hadoop-spezifische Analysesprache, die nach Meinung vieler besser für Map / Reduce-Workloads geeignet ist als SQL). Cassandra unterstützt auch die Verwendung von Spark .
Keine Sorge um "massive" Skalierbarkeit
Wenn Sie sich einen einzelnen Server ansehen, ist MongoDB wahrscheinlich besser geeignet. Für diejenigen, die sich mehr mit Skalierung beschäftigen, ist die No-Single-Point-of-Failure-Architektur von Cassandra einfacher einzurichten und zuverlässiger. (Die globale Schreibsperre von MongoDB wird auch schmerzhafter.) Cassandra bietet außerdem eine wesentlich bessere Kontrolle über die Funktionsweise Ihrer Replikation, einschließlich der Unterstützung mehrerer Rechenzentren.
Mehr Sorge um einfache Einrichtung, Wartung und Code
Beide sind trivial einzurichten, mit angemessenen Standardeinstellungen für einen einzelnen Server. Cassandra ist in einer Konfiguration mit mehreren Servern einfacher einzurichten, da keine Knoten mit speziellen Rollen erforderlich sind.
Wenn Sie derzeit JSON-Blobs verwenden, passt MongoDB wahnsinnig gut zu Ihrem Anwendungsfall, da BSON zum Speichern der Daten verwendet wird. Sie können umfangreichere und abfragbarere Daten haben als in Ihrer aktuellen Datenbank. Dies wäre der bedeutendste Sieg für Mongo.
quelle
Ich habe MongoDB (in den letzten 6 Monaten) ausgiebig genutzt und ein hierarchisches Datenverwaltungssystem aufgebaut. Ich kann sowohl für die einfache Einrichtung (installieren, ausführen, verwenden!) Als auch für die Geschwindigkeit bürgen. Solange Sie sorgfältig über Indizes nachdenken, kann es in Bezug auf die Geschwindigkeit absolut mitschreien.
Ich stelle fest, dass Cassandra aufgrund seiner Verwendung bei Großprojekten wie Twitter eine bessere Skalierungsfunktionalität hat, obwohl das MongoDB-Team dort an Parität arbeitet. Ich sollte darauf hinweisen, dass ich Cassandra nicht über die Testphase hinaus verwendet habe, daher kann ich nicht für Details sprechen.
Der eigentliche Swinger für mich, als wir NoSQL-Datenbanken bewerteten, war die Abfrage - Cassandra ist im Grunde genommen nur ein riesiger Schlüssel- / Wertspeicher, und die Abfrage ist etwas umständlich (zumindest im Vergleich zu MongoDB), also müssten Sie für die Leistung Duplizieren Sie eine ganze Reihe von Daten als eine Art manuellen Index. MongoDB verwendet dagegen ein "Query by Example" -Modell.
Angenommen, Sie haben eine Sammlung (MongoDB-Sprache für das Äquivalent zu einer RDMS-Tabelle), die Benutzer enthält. MongoDB speichert Datensätze als Dokumente, bei denen es sich im Grunde um binäre JSON-Objekte handelt. z.B:
Wenn Sie alle Benutzer mit dem Namen Smith finden möchten, die über Administratorrechte verfügen, erstellen Sie einfach ein neues Dokument (an der Administrationskonsole mit Javascript oder in der Produktion mit der Sprache Ihrer Wahl):
... und führen Sie dann die Abfrage aus. Das ist es. Es gibt Operatoren für Vergleiche, RegEx-Filterung usw., aber alles ist ziemlich einfach und die Wiki-basierte Dokumentation ist ziemlich gut.
quelle
As long as you think about indexes carefully, it can absolutely scream along, speed-wise.
Warten Sie, bis Ihr physischer Speicher voll ist und das Betriebssystem einen Seitenfehler beginnt.Warum zwischen einer herkömmlichen Datenbank und einem NoSQL-Datenspeicher wählen? Verwende beide! Das Problem bei NoSQL-Lösungen (über die anfängliche Lernkurve hinaus) ist das Fehlen von Transaktionen. Sie führen alle Aktualisierungen von MySQL durch und lassen MySQL einen NoSQL-Datenspeicher zum Lesen füllen. Dann profitieren Sie von den Stärken jeder Technologie. Dies erhöht zwar die Komplexität, aber Sie haben bereits die MySQL-Seite - fügen Sie einfach MongoDB, Cassandra usw. hinzu.
NoSQL-Datenspeicher skalieren im Allgemeinen viel besser als eine herkömmliche Datenbank für dieselben ansonsten Spezifikationen - es gibt einen Grund, warum Facebook, Twitter, Google und die meisten Start-ups NoSQL-Lösungen verwenden. Es sind nicht nur Geeks, die auf neue Technologien setzen.
quelle
Ich werde wahrscheinlich ein seltsamer Mann sein, aber ich denke, Sie müssen bei MySQL bleiben. Sie haben kein wirkliches Problem beschrieben, das Sie lösen müssen, und MySQL / InnoDB ist selbst für Blob / JSON-Daten ein hervorragendes Speicher-Back-End.
Webingenieure haben häufig den Trick, mehr NoSQL zu verwenden, sobald sie feststellen, dass nicht alle Funktionen eines RDBMS verwendet werden. Dies allein ist kein guter Grund, da NoSQL-Datenbanken meistens eher schlechte Daten-Engines haben (was MySQL als Speicher-Engine bezeichnet).
Wenn Sie nicht von dieser Art sind, geben Sie bitte an, was in MySQL fehlt und was Sie in einer anderen Datenbank suchen (z. B. Auto-Sharding, automatisches Failover, Multi-Master-Replikation, eine schwächere Datenkonsistenzgarantie in Cluster zahlt sich bei höherem Schreibdurchsatz aus usw.).
quelle
Ich habe Cassandra nicht benutzt, aber ich habe MongoDB benutzt und finde es großartig.
Wenn Sie nach einer einfachen Einrichtung suchen, ist dies das Folgende: Sie entpacken MongoDB einfach und führen den Mongod-Daemon aus, und das war's ... es läuft.
Natürlich ist das nur ein Anfang, aber es ist einfach, Ihnen den Einstieg zu erleichtern.
quelle
Ich habe gestern eine Präsentation über Mongodb gesehen. Ich kann definitiv sagen, dass das Setup "einfach" war, so einfach wie es auszupacken und zu starten. Erledigt.
Ich glaube, dass sowohl Mongodb als auch Cassandra auf praktisch jeder normalen Linux-Hardware laufen werden, so dass Sie in diesem Bereich nicht zu viele Barrieren finden sollten.
Ich denke, in diesem Fall wird es am Ende des Tages darauf ankommen, mit wem Sie sich persönlich wohler fühlen und welches Toolset Sie bevorzugen. In Bezug auf die Präsentation zu Mongodb gab der Moderator an, dass das Toolset für Mongodb ziemlich leicht war und dass es nicht viele (sie sagten wirklich) Tools gab, die denen für MySQL ähnelten. Dies war natürlich ihre Erfahrung so YMMV. Eine Sache, die ich an Mongodb mochte, war, dass es anscheinend viel Sprachunterstützung dafür gab (Python und .NET sind die beiden, die ich hauptsächlich benutze).
Die Liste der Websites, die Mongodb verwenden, ist ziemlich beeindruckend , und ich weiß, dass Twitter gerade auf Cassandra umgestellt hat.
quelle