Laut Wikipedia NoSQL-Artikel gibt es viele NoSQL-Implementierungen.
Was ist der Unterschied zwischen Dokumenten-orientierten und Schlüssel-Wert-Speichern (wie die Leute sie am häufigsten erwähnen)?
Hier ist ein Blogbeitrag, den ich geschrieben habe: Visueller Leitfaden zu NoSQL-Systemen , der das Hauptfach darstellt Unterschiede zwischen einigen der beliebtesten Systeme. Der größte Unterschied zwischen ihnen besteht darin, welche der folgenden beiden sie für die Optimierung verwenden: Konsistenz, Verfügbarkeit und Partitionstoleranz.
Auf einer Ebene sind Dokument und Schlüssel / Wert ziemlich ähnlich - beide werden ein Objekt zurückgeben, wenn Sie einen Schlüssel anfordern. In reinem Schlüssel / Wert wird dieses Objekt eine einfache Zeichenfolge sein, obwohl es ein serialisiertes komplexes Objekt sein kann. Eine Dokumentendatenbank erweitert dies um Funktionen, die mit diesem Objekt arbeiten, wie z. B. Teilupdate-Funktionalität oder Suchindexierung.
Darüber hinaus müssen Sie über Ihre spezifischen Anforderungen nachdenken. NOSQL deckt viele verschiedene Systeme ab, und im Gegensatz zu SQL-Datenbanken haben sie alle ganz unterschiedliche Vor- und Nachteile für ein bestimmtes Szenario.
Meiner Meinung nach kann ich nicht wirklich sehen, wie Cassandra nicht konsequent ist. Es kann keine konsistenten Updates durchführen, aber ich habe noch nie mit einem Datenbankmodell gearbeitet, bei dem Updates erforderlich sind, im Gegensatz zu konsistenten versionierten Einfügungen (manchmal auch als versionierte Updates bezeichnet, selbst wenn sie nicht wirklich aktualisiert werden.
Auch Cassandra kann vollständig ACID sein, wenn Sie Ihr Datenmodell ACID machen. Anstatt eine Datenbanktransaktion zu verwenden, führen Sie eine Transaktion so durch, wie es Banken tun. Dort ist die Transaktion keine Mehrdatenänderung, sondern ein aktuelles Datenobjekt.
Bankkonto hat kein Geld in ihnen. Sie haben Transaktionen und der aktuelle Status Ihres Kontos wird aus den Transaktionen berechnet. Solche Transaktionen sind keine Datenbankfunktion, sondern Teil des Datenmodells. Sie müssen nicht für alle Knoten sofort verfügbar sein, um konsistent zu sein, da sie unveränderlich sind.
Ich habe keinen Fall gefunden, in dem die Unveränderbarkeit von Daten das Konsistenzproblem nicht löst. Dies kombiniert mit der Tatsache, dass Transaktionen Teil des Datenmodells als unveränderliche Daten werden (einmal schreiben, viele lesen), werden die ACID-Anforderungen erfüllt.
Atom - Eine Transaktion als eindeutiges unveränderliches Objekt / Zeile wird atomar, ohne dass ein komplexes Datenbankobjekt dies unterstützt.
Konsistenz - Ein Datenbankvorgang oder eine Transaktion kann im Datenmodell so entworfen werden, dass sie konsistent ist. Alles, was benötigt wird, ist wirklich, dass es unveränderlich ist (nie nach der Schöpfung geändert)
Isolation - Eine Transaktion, die ihr eigenes Datenobjekt ist, sollte nicht mit anderen kollidieren und ist daher isoliert.
Haltbarkeit - Wenn unveränderliche Daten einer Transaktion verloren gehen, entspricht dies der Wiederherstellung des vorherigen Zustandes der Datenbank. Wenn die Daten nicht verloren gehen, befinden sie sich in ihrem Zustand nach der Transaktion. In jedem Fall erfüllt es die Haltbarkeitsanforderung von ACID.
Es stimmt, dass im Datenmodell "Bank" einige Dinge nicht erreicht werden können. Ihre Kontoinformationen dürfen keine ACID-Zeile mit einem festen Geldbetrag enthalten. Während die Transaktionen selbst ACID sind, bedeutet das nicht, dass Daten von ihnen abhängig sein können. Dies liegt daran, dass alle Transaktionen möglicherweise noch nicht von allen Knoten sichtbar sind. Sie können sogar in einer anderen Bankdatenbank sein. Daher kann Ihr Kontostand keine ACID-Konsistenz erreichen, aber es gibt keinen Grund für eine solche Anforderung, solange alle wichtigen Daten die ACID-Konsistenz haben - was sie tut.
Ich habe die Bankdatenbank als Beispiel verwendet, weil sie oft als Beispiel dafür verwendet wird, wie man SQL-Transaktionen mit Rollback auf Kontostand durchführt - etwas, das NIEMALS in tatsächlichen Implementierungen passiert ... weil Banktransaktionen asynchrone Multidatenbank unterstützen müssen Transaktionen oder mit anderen Worten bankübergreifende Transaktionen.
Sie können dies auch auf ein Dateisystem beziehen. Cassandra (zum Beispiel) kann Ihnen eine konsistente Ansicht eines unveränderlichen Schnappschusses einer Datei geben. Es ist nicht garantiert, dass Sie eine Ansicht des letzten Schnappschusses haben - aber Ein Schnappschuss. Damit ist es so konsistent wie CVS / SVN oder CODA.