Die drei Arten von NoSQL-Datenbanken, über die ich gelesen habe, sind Schlüsselwert-, Spalten- und Dokumentorientierung.
Der Schlüsselwert ist ziemlich einfach - ein Schlüssel mit einem einfachen Wert.
Ich habe dokumentenorientierte Datenbanken gesehen, die als Schlüsselwert beschrieben wurden, aber der Wert kann eine Struktur sein, wie ein JSON-Objekt. Jedes "Dokument" kann alle, einige oder keine der gleichen Schlüssel wie ein anderes haben.
Spaltenorientiert scheint Dokumentorientiert zu sein, da Sie keine Struktur angeben.
Was ist der Unterschied zwischen diesen beiden und warum sollten Sie einen über den anderen verwenden?
Ich habe mir MongoDB und Cassandra speziell angesehen. Ich brauche grundsätzlich eine dynamische Struktur, die sich ändern kann, aber andere Werte nicht beeinflusst. Gleichzeitig muss ich in der Lage sein, bestimmte Schlüssel zu suchen / zu filtern und Berichte auszuführen. Bei CAP ist AP für mich das Wichtigste. Die Daten können "eventuell" knotenübergreifend synchronisiert werden, solange kein Konflikt oder Datenverlust vorliegt. Jeder Benutzer würde seine eigene "Tabelle" bekommen.
Der Hauptunterschied besteht darin, dass Dokumentenspeicher (z. B. MongoDB und CouchDB) beliebig komplexe Dokumente zulassen, dh Unterdokumente innerhalb von Unterdokumenten, Listen mit Dokumenten usw., während Spaltenspeicher (z. B. Cassandra und HBase) nur ein festes Format zulassen, z. B. strikte einstufige oder zweistufige Wörterbücher.
quelle
In "Einfügen" ist "Dokumentbasiert" konsistenter und direkter, um rdbms-Wörter zu verwenden. Beachten Sie, dass Sie mit Cassandra eine Übereinstimmung mit dem Begriff des Quorums erzielen können. Dies gilt jedoch nicht für alle spaltenbasierten Systeme und verringert die Verfügbarkeit. Entscheiden Sie sich auf einem System mit einmaligem Schreiben und häufigem Lesen für MongoDB. Berücksichtigen Sie dies auch, wenn Sie immer die gesamte Struktur des Objekts lesen möchten. Ein dokumentbasiertes System ist so konzipiert, dass es das gesamte Dokument zurückgibt, wenn Sie es erhalten, und ist nicht sehr stark darin, Teile der gesamten Zeile zurückzugeben.
Die spaltenbasierten Systeme wie Cassandra sind in "Updates" weitaus besser als dokumentbasierte. Sie können den Wert einer Spalte ändern, ohne die Zeile zu lesen, die sie enthält. Der Schreibvorgang muss nicht unbedingt auf demselben Server ausgeführt werden. Eine Zeile kann in mehreren Dateien mehrerer Server enthalten sein. Entscheiden Sie sich auf einem riesigen, sich schnell entwickelnden Datensystem für Cassandra. Berücksichtigen Sie dies auch, wenn Sie einen sehr großen Datenblock pro Schlüssel planen und nicht alle bei jeder Abfrage laden müssen. In "Auswählen" können Sie mit Cassandra nur die Spalte laden, die Sie benötigen.
Bedenken Sie auch, dass Mongo DB in C ++ geschrieben ist und sich in der zweiten Hauptversion befindet, während Cassandra auf einer JVM ausgeführt werden muss und die erste Hauptversion erst seit gestern im Release Candidate ist (aber die 0.X-Versionen wurden in Produktionen von gedreht großes Unternehmen bereits).
Auf der anderen Seite basierte Cassandras Design teilweise auf Amazon Dynamo und ist im Kern als Hochverfügbarkeitslösung konzipiert, was jedoch nichts mit dem spaltenbasierten Format zu tun hat. MongoDB skaliert ebenfalls, aber nicht so anmutig wie Cassandra.
quelle
Ich würde sagen, dass der Hauptunterschied darin besteht, wie jeder dieser DB-Typen die Daten physisch speichert.
Bei Spaltentypen werden die Daten in Spalten gespeichert, die effiziente Aggregationsoperationen / Abfragen für eine bestimmte Spalte ermöglichen.
Bei Dokumenttypen wird das gesamte Dokument logisch an einem Ort gespeichert und im Allgemeinen als Ganzes abgerufen (keine effiziente Aggregation für "Spalten" / "Felder" möglich).
Das verwirrende Bit ist, dass eine breitspaltige "Zeile" leicht als Dokument dargestellt werden kann, aber wie erwähnt unterschiedlich gespeichert und für unterschiedliche Zwecke optimiert wird.
quelle