Ich werde dies nur als Antwort zur Unterstützung des Gesprächs veröffentlichen - Tim Mahy , Nawroth und CraigTP haben brauchbare Datenbanken vorgeschlagen. CouchDB wäre aufgrund der Verwendung von Erlang meine bevorzugte , aber es gibt andere da draußen.
Ich würde sagen, dass ACID dem Konzept von NoSQL nicht widerspricht oder es negiert ... Obwohl es einen Trend zu geben scheint, der der Meinung von Dove folgt , würde ich argumentieren, dass die Konzepte unterschiedlich sind.
Bei NoSQL geht es im Wesentlichen um einfache Schlüsselwert- (z. B. Redis) oder dokumentartige Schemata (gesammelte Schlüssel-Wert-Paare in einem "Dokument" -Modell, z. B. MongoDB) als direkte Alternative zum expliziten Schema in klassischen RDBMS. Es ermöglicht dem Entwickler, Dinge asymmetrisch zu behandeln , während herkömmliche Engines eine starre Gleichheit im gesamten Datenmodell erzwungen haben . Der Grund, warum dies so interessant ist, liegt darin, dass es eine andere Möglichkeit bietet, mit Änderungen umzugehen , und für größere Datenmengen interessante Möglichkeiten bietet, mit Volumen und Leistung umzugehen.
ACID enthält Grundsätze für die Anwendung von Änderungen auf eine Datenbank. Auf sehr vereinfachte Weise heißt es (meine eigene Version):
(A) Wenn Sie etwas tun, um eine Datenbank zu ändern, sollte die Änderung funktionieren oder insgesamt fehlschlagen
(C) Die Datenbank sollte konsistent bleiben (dies ist ein ziemlich breites Thema).
(I) Wenn andere Dinge gleichzeitig ablaufen, sollten sie die Dinge während des Updates nicht sehen können
(D) Wenn das System explodiert (Hardware oder Software), muss die Datenbank in der Lage sein, sich selbst wieder aufzunehmen. und wenn es heißt, dass die Anwendung eines Updates abgeschlossen ist, muss es sicher sein
Das Gespräch wird ein wenig aufregender, wenn es um die Idee der Verbreitung und der Einschränkungen geht . Einige RDBMS-Engines bieten die Möglichkeit, Einschränkungen (z. B. Fremdschlüssel) zu erzwingen, die möglicherweise Propagierungselemente enthalten (a la cascade ). Einfacher ausgedrückt kann eine "Sache" eine Beziehung zu einer anderen "Sache" in der Datenbank haben, und wenn Sie ein Attribut von einer ändern, muss möglicherweise die andere geändert werden (aktualisiert, gelöscht, ... viele Optionen). NoSQL- Datenbanken, die (derzeit) vorwiegend auf hohe Datenmengen und hohen Datenverkehr ausgerichtet sind, scheinen sich mit der Idee verteilter Aktualisierungen zu befassen, die innerhalb (aus Verbrauchersicht) beliebiger Zeitrahmen stattfinden. Dies ist im Grunde eine spezielle Form der Replikation, die über verwaltet wirdTransaktion - Ich würde also sagen, wenn eine herkömmliche verteilte Datenbank ACID unterstützen kann, kann dies auch eine NoSQL-Datenbank.
Gute Antwort. Sie können sowohl NoSQL + ACID als auch Nicht-ACID-RDBMS verwenden (denken Sie an MySQL + MyISAM). Normalerweise würde ich NoSQL als "irgendwann konsistent" betrachten. Ich werde auch den CAP-Satz
einwerfen
+1 @gbn für die Erwähnung des CAP-Theorems. Wenn ich jetzt besser mit "nosql" -DBs vertraut bin als damals, hat dies die Trennung der Konzepte nur verstärkt. Auch Schlüsselwert gegen Dokumentendatenbanken, da es architektonische Unterschiede gibt.
UPDATE (27. Juli 2012): Der Link zum Wikipedia-Artikel wurde aktualisiert, um die Version des Artikels wiederzugeben, die zum Zeitpunkt der Veröffentlichung dieser Antwort aktuell war. Bitte beachten Sie, dass der aktuelle Wikipedia-Artikel umfassend überarbeitet wurde!
NoSQL ist eine Bewegung, die eine lose definierte Klasse nicht relationaler Datenspeicher fördert, die mit einer langen Geschichte relationaler Datenbanken und ACID-Garantien brechen.
und auch:
Der Name war ein Versuch, die Entstehung einer wachsenden Anzahl nicht relationaler, verteilter Datenspeicher zu beschreiben, die häufig nicht versuchten, ACID-Garantien bereitzustellen.
und
NoSQL-Systeme bieten häufig schwache Konsistenzgarantien wie eventuelle Konsistenz und Transaktionen, die auf einzelne Datenelemente beschränkt sind, obwohl man durch Hinzufügen einer zusätzlichen Middleware-Schicht vollständige ACID-Garantien auferlegen kann.
Kurz gesagt, ich würde sagen, dass einer der Hauptvorteile eines "NoSQL" -Datenspeichers das deutliche Fehlen von ACID- Eigenschaften ist. IMHO, je mehr man versucht, ACID- Eigenschaften zu implementieren und durchzusetzen, desto weiter entfernt man sich vom "Geist" eines "NoSQL" -Datenspeichers und desto näher an einem "echten" RDBMS (relativ gesehen natürlich) ).
Alles in allem ist "NoSQL" jedoch ein sehr vager Begriff, der für individuelle Interpretationen offen ist und stark davon abhängt, wie sehr Sie einen puristischen Standpunkt vertreten. Zum Beispiel RDBMS meisten heutigen Systeme nicht wirklich halten alle von Edgar F. Codd ‚s 12 Regeln seiner Beziehung Modell !
Bei einem pragmatischen Ansatz scheint Apaches CouchDB der Verkörperung der ACID-Konformität am nächsten zu kommen, während die lose gekoppelte, nicht relationale "NoSQL" -Mentalität beibehalten wird.
+1 Ich bin mir nicht sicher, ob ich dem Mangel an ACID als Schlüsselmerkmal von "NoSQL" zustimme, aber ich schätze Ihre Beschreibung sehr. Letztendlich sollte es sich um eine Lösung handeln, die passt.
AJ.
2
Ich habe (ausstehende Überprüfung) bearbeitet, um zu versuchen, noch klarer zu machen. An NoSQL-Datenmodellen gibt es nichts, was impliziert, dass ACID-Transaktionen nicht möglich sind. Einige verteilte NoSQL-Systeme haben sie nicht. Einige verzichten tatsächlich auf eine "Middleware-Schicht".
Eric Bloch
2
Dies war nie richtig und hat sogar seine Quelle verloren. Es sollte wirklich gelöscht werden.
Lennart Regebro
2
Am offensichtlichsten ist dies: "Kurz gesagt, ich würde sagen, dass einer der Hauptvorteile eines" NoSQL "-Datenspeichers das deutliche Fehlen von ACID-Eigenschaften ist." Sie implizieren auch, dass sich NoSQL und ACID irgendwie gegenseitig ausschließen, was definitiv falsch ist. Dies ist ein gutes Beispiel dafür, wie eine große Anzahl von Unwissenden eine falsche Antwort befürwortet, weil sie vernünftig klingt. Dass die meisten NoSQL-Datenbanken nicht ACID-konform sind, liegt hauptsächlich daran, dass die implementierten Personen nicht wussten, was es war / warum es wichtig war / sich nicht darum kümmerten.
Lennart Regebro
@ LennartRegebro - Ich habe so etwas nicht impliziert. Die ACID-Konformität wurde in der Tat von den meisten aktuellen NoSQL-Datenbanken zugunsten von Geschwindigkeit / Leistung und eventueller Konsistenz vermieden. Ich habe nie gesagt, dass Sie NoSQL mit ACID-Konformität nicht haben können.
Zunächst können wir zwei Arten von NoSQL-Datenbanken unterscheiden:
Aggregatorientierte Datenbanken;
Graphorientierte Datenbanken (zB Neo4J).
Die meisten graphorientierten Datenbanken sind von Natur aus ACID !
Was ist dann mit den anderen Typen?
In aggregatorientierten Datenbanken können drei Untertypen eingefügt werden:
Dokumentbasierte NoSQL-Datenbanken (z. B. MongoDB, CouchDB);
Schlüssel / Wert NoSQL-Datenbanken (zB Redis);
NoSQL-Datenbanken der Spaltenfamilie (z. B. Hibase, Cassandra).
Was wir hier als Aggregat bezeichnen , hat Eric Evans in seinem domänengesteuerten Design als autark für Entitäten und Wertobjekte in einem bestimmten begrenzten Kontext definiert.
Folglich ist ein Aggregat eine Sammlung von Daten, mit denen wir als Einheit interagieren. Aggregate bilden die Grenzen für ACID-Operationen mit der Datenbank. (Martin Fowler)
Also, auf aggregierter Ebene, können wir sagen , dass die meisten NoSQL - Datenbanken so sicher wie ACID RDBMS sein können , mit den richtigen Einstellungen. Wenn Sie Ihren Server auf die beste Geschwindigkeit einstellen, können Sie natürlich auf etwas stoßen, das nicht ACID ist. Aber die Replikation wird helfen.
Mein Hauptpunkt ist, dass Sie NoSQL-Datenbanken so wie sie sind verwenden müssen, nicht als (billige) Alternative zu RDBMS. Ich habe zu viele Projekte gesehen, die die Beziehungen zwischen Dokumenten missbrauchen. Dies kann keine Säure sein. Wenn Sie auf Dokumentebene bleiben, dh an aggregierten Grenzen, benötigen Sie keine Transaktion. Und Ihre Daten sind so sicher wie bei einer ACID-Datenbank, auch wenn sie nicht wirklich ACID sind, da Sie diese Transaktionen nicht benötigen! Wenn Sie Transaktionen benötigen und mehrere "Dokumente" gleichzeitig aktualisieren, befinden Sie sich nicht mehr in der NoSQL-Welt - verwenden Sie stattdessen eine RDBMS-Engine!
Einige Aktualisierungen für 2019: Ab Version 4.0 bietet MongoDB für Situationen, in denen Aktualisierungen für mehrere Dokumente oder Konsistenz zwischen Lesevorgängen für mehrere Dokumente erforderlich sind, Transaktionen mit mehreren Dokumenten für Replikatsätze an .
Es gibt Fälle, in denen es einen großen Prozess / eine große Saga gibt, die viele Aggregate verarbeitet. Es gibt Fälle, in denen ein an ein Aggregat gesendeter Befehl einige Ereignisse auslöst, die andere Aggregate ändern. In diesen Fällen benötigen Sie ACID-kompatible Datenspeicher.
Tudor
1
@TudorTudor, aber in diesem Fall brechen Sie eines der nosql-Prinzipien, da Sie es als rdbms verwenden. Sie benötigen nur größere Aggregate oder eine Versionierung der Dokumente (wie in couchdb). Nosql dokumentenorientierte db sind an Dokument- / Aggregatgrenzen sauer.
Arnaud Bouchez
Keiner von denen, die Sie auflisten, ist säurekonform. Mongo besitzt einfach nicht ACID-konform. CouchDB gibt vor, säurekonform zu sein, solange Sie nicht zwei Dokumente aktualisieren. Redis hat nur "teilweise Unterstützung für Transaktionen". HBase ist direkt nicht säurekonform (von den Entwicklern) , Cassandra auch nicht. Diese Antwort ist in der Tat einfach falsch. Keine dieser Datenbanken unterstützt ACID, und die meisten von ihnen besitzen es offen mit einer einfachen Google-Suche.
Evan Carroll
@EvanCarroll Ich habe nie geschrieben, dass MongoDB ACID-konform ist, in der gleichen Bedeutung wie bei einer ACID-RDBMS-Transaktion. Es ist keine Transaktion verfügbar. Was ich geschrieben habe ist, dass die meisten NoSQL-Datenbanken mit den richtigen Einstellungen so sicher sein können wie ACID RDBMS . Überprüfen Sie beispielsweise den Operator $ isolierte MongoDB für eine Datenbank ohne gemeinsam genutzten Cluster. Ich würde MongoDB niemals für Finanzprozesse verwenden, aber ich könnte seinem Schreibprozess für ACID-ähnliche Operationen in gewissem Maße vertrauen, wenn das A für Atomicity ausreicht. Entschuldigung, wenn meine Antwort verwirrend ist.
Es verfügt über ordnungsgemäße Transaktionen, sodass Sie mehrere unterschiedliche Datenelemente auf ACID-Weise aktualisieren können. Dies wird als Grundlage für die Aufrechterhaltung von Indizes auf einer höheren Ebene verwendet.
Leider ist es nicht Open Source. Aber es sieht aus wie eine sehr schöne Datenbank.
Kevin Cox
Um die Antwort von @ Ken-Tindell zu addieren, ist djondb auch NoSQL und implementiert Transaktionen und ist ACID-konform. djondb.com Ich stimme zu, dass NoSQL nur ein Begriff ist, um alle Datenbanken zu prägen, die nicht den traditionellen Regeln des RDBMS entsprechen. Es bedeutet nicht, "die TX-Systeme loszuwerden" oder die Beziehungen zu vergessen.
Kreuz
3
Meine Antwort wurde durch die Übernahme von Foundation DB durch Apple in Frage gestellt.
Ken Tindell
1
Foundationdb ist jetzt Open
Source
17
In dieser Frage muss jemand OrientDB erwähnen : OrientDB ist eine NoSQL-Datenbank, eine der wenigen, die vollständig ACID-Transaktionen unterstützt. ACID ist nicht nur für RDBMS gedacht, da es nicht Teil der relationalen Algebra ist. Es ist also möglich, eine NoSQL-Datenbank zu haben, die ACID unterstützt.
ACID und NoSQL sind vollständig orthogonal. Eins impliziert nicht das andere.
Ich habe ein Notizbuch auf meinem Schreibtisch, mit dem ich Notizen zu Dingen mache, die ich noch tun muss. Dieses Notizbuch ist eine NoSQL-Datenbank. Ich frage es mit einer linearen Suche mit einem "Seiten-Cache" ab, damit ich nicht immer jede Seite durchsuchen muss. Es ist auch ACID-konform, da ich sicherstelle, dass ich immer nur eine Sache gleichzeitig schreibe und niemals, während ich sie lese.
NoSQL bedeutet einfach, dass es kein SQL ist. Viele Menschen sind verwirrt und denken, dass dies eine hochskalierbare Wild-West-Super-Fast-Speicherung bedeutet. Das tut es nicht. Dies bedeutet nicht, dass Schlüsselwerte gespeichert werden oder dass eine eventuelle Konsistenz besteht. Alles was es bedeutet ist "nicht SQL", es gibt viele Datenbanken auf diesem Planeten und die meisten von ihnen sind nicht SQL [Zitieren erforderlich] .
In den anderen Antworten finden Sie viele Beispiele, daher muss ich sie hier nicht auflisten. Es gibt jedoch Nicht-SQL-Datenbanken mit ACID-Konformität für verschiedene Vorgänge. Einige sind nur ACID für Einzelobjektschreibvorgänge, während andere weitaus mehr garantieren. Jede Datenbank ist anders.
Nur um pedantisch zu sein, aber es bedeutet normalerweise "Nicht nur SQL" :-)
shmish111
4
@ shmish111 nicht wirklich. Es bedeutete "No SQL", als der Begriff zum ersten Mal geprägt wurde. Das "o" ist klein, schließlich kein Kapital. Es gab später Versuche, den Begriff "Nicht nur SQL" wiederzugeben, als einige dieser (NoSQL-Produkte) anfingen, SQL-ähnliche Abfragesprachenschnittstellen hinzuzufügen.
Ypercubeᵀᴹ
11
"NoSQL" ist kein genau definierter Begriff. Es ist ein sehr vages Konzept. Daher ist es nicht einmal möglich zu sagen, was ein "NoSQL" -Produkt ist und was nicht. Nicht fast alle Produkte, die typischerweise mit dem Etikett versehen sind, sind Schlüsselgeschäfte.
Beste Antwort. Wann immer dieser Flammenkrieg auftaucht, frage ich die andere Partei gerne, welche definierenden Funktionen sie explizit von einer NoSQL-Datenbank benötigen, und oft überschneidet sie sich mit Funktionen, die sie in einem RDBMS finden können - nicht, weil eines oder RDBMS zum NoSQL-Thema passen, sondern einfach, weil ihre Die Anforderungen an Features sind so vage, dass sie nicht vollständig negiert werden. Features, die in (nicht unbedingt allen) RDMBS enthalten sind. +1 für deinen Kommentar Kumpel!
StartupGuy
8
Ja, MarkLogic Server ist eine NoSQL-Lösung (Dokumentendatenbank, die ich gerne nenne), die mit ACID-Transaktionen funktioniert
MarkLogic bietet ACID-Transaktionen, Transaktionen mit mehreren Dokumenten, Transaktionen mit mehreren Anweisungen und Unterstützung für XA - alles clusterweit / verteilt.
Für diejenigen, die von Pythons "Regal" -Bibliothek wechseln möchten, fand ich ZODB fast scheinbar. Ich musste nicht alle meine Funktionen neu schreiben - greifen Sie einfach wie ein Regal auf ZODB als Wörterbuch zu, aber es ist eine Größenordnung schneller.
Michael Galaxy
8
Als einer der Urheber von NoSQL (ich war ein früher Mitarbeiter von Apache CouchDB und Redner bei der ersten NoSQL-Veranstaltung bei CBS Interactive / CNET im Jahr 2009) bin ich gespannt, wie neue Algorithmen Möglichkeiten schaffen, die es vorher nicht gab . Das Calvin-Protokoll bietet eine neue Möglichkeit, physikalische Einschränkungen wie CAP und PACELC zu berücksichtigen .
Anstelle der aktiven / passiven asynchronen Replikation oder der aktiven / aktiven synchronen Replikation bewahrt Calvin die Korrektheit und Verfügbarkeit bei Replikationsausfällen, indem ein RAFT-ähnliches Protokoll zur Verwaltung eines Transaktionsprotokolls verwendet wird. Darüber hinaus werden Transaktionen bei jedem Replikat deterministisch verarbeitet , wodurch das Potenzial für Deadlocks beseitigt wird, sodass eine Einigung mit nur einer einzigen Konsensrunde erzielt wird. Dies macht es auch bei weltweiten Bereitstellungen mit mehreren Clouds schnell.
FaunaDB ist die einzige Datenbankimplementierung, die das Calvin-Protokoll verwendet. Damit eignet es sich hervorragend für Workloads, die eine Mainframe-ähnliche Datenintegrität mit NoSQL-Skalierung und Flexibilität erfordern.
Wenn Sie nach einem ACID-kompatiblen Schlüssel- / Wertspeicher suchen, gibt es Berkeley DB . Unter Graph - Datenbanken mindestens Neo4j und HyperGraphDB bieten ACID - Transaktionen (HyperGraphDB tatsächlich nutzt Berkeley DB für Low-Level - Speicher im Moment).
[…] Eine Klasse moderner relationaler Datenbankverwaltungssysteme, die die gleiche skalierbare Leistung von NoSQL-Systemen für OLTP-Lese- / Schreib-Workloads (Online Transaction Processing) bereitstellen und gleichzeitig die ACID-Garantien eines herkömmlichen Datenbanksystems beibehalten möchten.[1][2][3]
Ja, ACID-Transaktionen mit mehreren Dokumenten werden jetzt in MongoDB unterstützt. Siehe mongodb.com/transactions für weitere Informationen und tief tauchen Videos in , wie sie umgesetzt wurden.
Im Gegensatz zur eigenen Persistenz oder Serialisierung ist db4o ACID-transaktionssicher und ermöglicht Abfragen, Replikationen und Schemaänderungen zur Laufzeit
Tarantool ist eine vollständig ACID NoSQL-Datenbank. Sie können CRUD-Operationen oder gespeicherte Prozeduren ausgeben. Alles wird unter strikter Übereinstimmung mit einer ACID-Eigenschaft ausgeführt. Sie können darüber auch hier lesen: http://stable.tarantool.org/doc/mpage/data-and-persistence.html
Unterstützt Aerospike Multi-Key-ACID-Transaktionen? AKAIK ist auf Einzelschlüsseltransaktionen beschränkt.
Eonil
1
BergDB ist eine leichte Open-Source-NoSQL-Datenbank, die von Anfang an für die Ausführung von ACID-Transaktionen entwickelt wurde. Tatsächlich ist BergDB "mehr" ACID als die meisten SQL-Datenbanken in dem Sinne, dass die einzige Möglichkeit , den Status der Datenbank zu ändern, darin besteht, ACID-Transaktionen mit der höchsten Isolationsstufe auszuführen (SQL-Begriff: "serialisierbar"). Es wird niemals Probleme mit Dirty Reads, nicht wiederholbaren Reads oder Phantom Reads geben.
Meiner Meinung nach ist die Datenbank immer noch sehr leistungsfähig. Aber vertrau mir nicht, ich habe die Software erstellt. Probieren Sie es stattdessen selbst aus.
Viele moderne NoSQL-Lösungen unterstützen keine ACID-Transaktionen (atomar isolierte Multi-Key-Updates), aber die meisten unterstützen Grundelemente, mit denen Sie Transaktionen auf Anwendungsebene implementieren können.
Wenn ein Datenspeicher die Linearisierbarkeit pro Schlüssel und das Vergleichen und Festlegen (Atomizität auf Dokumentebene) unterstützt, reicht es aus, clientseitige Transaktionen zu implementieren. Darüber hinaus haben Sie mehrere Optionen zur Auswahl:
Wenn Sie eine serialisierbare Isolationsstufe benötigen, können Sie denselben Algorithmus verwenden, den Google für das Percolator- System oder Cockroach Labs für CockroachDB verwendet . Ich habe darüber gebloggt und eine schrittweise Visualisierung erstellt . Ich hoffe, es wird Ihnen helfen, die Hauptidee hinter dem Algorithmus zu verstehen.
Wenn Sie hohe Konflikte erwarten, die Isolationsstufe "Read Committed" jedoch in Ordnung ist, werfen Sie einen Blick auf die RAMP-Transaktionen von Peter Bailis.
Der dritte Ansatz besteht darin, kompensierende Transaktionen zu verwenden, die auch als Saga-Muster bezeichnet werden. Es wurde in den späten 80ern in der Zeitung Sagas beschrieben, wurde jedoch mit der Einführung verteilter Systeme aktueller. Inspiration finden Sie im Vortrag Anwenden des Saga-Musters .
Die Liste der Datenspeicher, die für clientseitige Transaktionen geeignet sind, umfasst Cassandra mit einfachen Transaktionen, Riak mit konsistenten Buckets, RethinkDB, ZooKeeper, Etdc, HBase, DynamoDB, MongoDB und andere.
VoltDB ist ein Anbieter, der behauptet, ACID-konform zu sein, und obwohl SQL weiterhin verwendet wird, sind seine Ziele hinsichtlich der Skalierbarkeit dieselben
Der Schöpfer von VoltDB erwähnte, dass sie sich nicht als NoSql bezeichnen, sondern eher als NewSql (verwenden immer noch SQL, aber mit einer besseren Implementierung als die in den achtziger Jahren gebauten RDBMs)
Matt W
0
Während es sich nur um eine eingebettete Engine und nicht um einen Server handelt, verfügt leveldb über WriteBatch und die Möglichkeit, synchrone Schreibvorgänge zu aktivieren, um ACID-Verhalten bereitzustellen.
Nicht nur NoSQL ist vom Design her nicht ACID-konform. Die NoSQL-Bewegung umfasst die BASE (Grundsätzlich verfügbar, weicher Zustand, eventuelle Konsistenz), die angeblich das Gegenteil von ACID ist. NoSQL-Datenbanken werden häufig als eventuell konsistente Datenbank bezeichnet. Um die Unterschiede zu verstehen, sollten Sie einen Drilldown in den CAP-Satz (auch bekannt als Brewer-Satz) durchführen.
Ich denke, ein Hinweis auf den CAP-Satz ist für diese Frage sehr relevant!
MXRO
2
Einige NoSQL-Datenbanken verfügen über ACID-Transaktionen.
Eric Bloch
1
Einige noSQL behaupten, ACID-konform zu sein, aber wenn Sie einen Drilldown durchführen, stellen Sie fest, dass sie nur in bestimmten Fällen ACID sind, also IMHO, da es keine "eventuelle ACID" gibt, sind sie definitiv keine ACID
Ste
1
Sie wenden CAP grundlegend an. CAP und ACID sind bestenfalls lose miteinander verbunden, aber CAP verhindert nicht, dass ein verteiltes System ACID-konform ist. CAP beschreibt die erforderlichen Kompromisse eines verteilten Systems - ein stark konsistentes NoSQL-System ist möglicherweise während einer Partition nicht verfügbar, schließt jedoch nicht aus, dass es ACID-konform ist.
Antworten:
Ich werde dies nur als Antwort zur Unterstützung des Gesprächs veröffentlichen - Tim Mahy , Nawroth und CraigTP haben brauchbare Datenbanken vorgeschlagen. CouchDB wäre aufgrund der Verwendung von Erlang meine bevorzugte , aber es gibt andere da draußen.
Ich würde sagen, dass ACID dem Konzept von NoSQL nicht widerspricht oder es negiert ... Obwohl es einen Trend zu geben scheint, der der Meinung von Dove folgt , würde ich argumentieren, dass die Konzepte unterschiedlich sind.
Bei NoSQL geht es im Wesentlichen um einfache Schlüsselwert- (z. B. Redis) oder dokumentartige Schemata (gesammelte Schlüssel-Wert-Paare in einem "Dokument" -Modell, z. B. MongoDB) als direkte Alternative zum expliziten Schema in klassischen RDBMS. Es ermöglicht dem Entwickler, Dinge asymmetrisch zu behandeln , während herkömmliche Engines eine starre Gleichheit im gesamten Datenmodell erzwungen haben . Der Grund, warum dies so interessant ist, liegt darin, dass es eine andere Möglichkeit bietet, mit Änderungen umzugehen , und für größere Datenmengen interessante Möglichkeiten bietet, mit Volumen und Leistung umzugehen.
ACID enthält Grundsätze für die Anwendung von Änderungen auf eine Datenbank. Auf sehr vereinfachte Weise heißt es (meine eigene Version):
Das Gespräch wird ein wenig aufregender, wenn es um die Idee der Verbreitung und der Einschränkungen geht . Einige RDBMS-Engines bieten die Möglichkeit, Einschränkungen (z. B. Fremdschlüssel) zu erzwingen, die möglicherweise Propagierungselemente enthalten (a la cascade ). Einfacher ausgedrückt kann eine "Sache" eine Beziehung zu einer anderen "Sache" in der Datenbank haben, und wenn Sie ein Attribut von einer ändern, muss möglicherweise die andere geändert werden (aktualisiert, gelöscht, ... viele Optionen). NoSQL- Datenbanken, die (derzeit) vorwiegend auf hohe Datenmengen und hohen Datenverkehr ausgerichtet sind, scheinen sich mit der Idee verteilter Aktualisierungen zu befassen, die innerhalb (aus Verbrauchersicht) beliebiger Zeitrahmen stattfinden. Dies ist im Grunde eine spezielle Form der Replikation, die über verwaltet wirdTransaktion - Ich würde also sagen, wenn eine herkömmliche verteilte Datenbank ACID unterstützen kann, kann dies auch eine NoSQL-Datenbank.
Einige Ressourcen zur weiteren Lektüre:
quelle
UPDATE (27. Juli 2012): Der Link zum Wikipedia-Artikel wurde aktualisiert, um die Version des Artikels wiederzugeben, die zum Zeitpunkt der Veröffentlichung dieser Antwort aktuell war. Bitte beachten Sie, dass der aktuelle Wikipedia-Artikel umfassend überarbeitet wurde!
Nun, laut einer älteren Version eines Wikipedia-Artikels über NoSQL :
und auch:
und
Kurz gesagt, ich würde sagen, dass einer der Hauptvorteile eines "NoSQL" -Datenspeichers das deutliche Fehlen von ACID- Eigenschaften ist. IMHO, je mehr man versucht, ACID- Eigenschaften zu implementieren und durchzusetzen, desto weiter entfernt man sich vom "Geist" eines "NoSQL" -Datenspeichers und desto näher an einem "echten" RDBMS (relativ gesehen natürlich) ).
Alles in allem ist "NoSQL" jedoch ein sehr vager Begriff, der für individuelle Interpretationen offen ist und stark davon abhängt, wie sehr Sie einen puristischen Standpunkt vertreten. Zum Beispiel RDBMS meisten heutigen Systeme nicht wirklich halten alle von Edgar F. Codd ‚s 12 Regeln seiner Beziehung Modell !
Bei einem pragmatischen Ansatz scheint Apaches CouchDB der Verkörperung der ACID-Konformität am nächsten zu kommen, während die lose gekoppelte, nicht relationale "NoSQL" -Mentalität beibehalten wird.
quelle
Bitte lesen Sie die Einführung von Martin Fowler zu NoSQL-Datenbanken . Und das entsprechende Video.
Zunächst können wir zwei Arten von NoSQL-Datenbanken unterscheiden:
Die meisten graphorientierten Datenbanken sind von Natur aus ACID !
Was ist dann mit den anderen Typen?
In aggregatorientierten Datenbanken können drei Untertypen eingefügt werden:
Was wir hier als Aggregat bezeichnen , hat Eric Evans in seinem domänengesteuerten Design als autark für Entitäten und Wertobjekte in einem bestimmten begrenzten Kontext definiert.
Also, auf aggregierter Ebene, können wir sagen , dass die meisten NoSQL - Datenbanken so sicher wie ACID RDBMS sein können , mit den richtigen Einstellungen. Wenn Sie Ihren Server auf die beste Geschwindigkeit einstellen, können Sie natürlich auf etwas stoßen, das nicht ACID ist. Aber die Replikation wird helfen.
Mein Hauptpunkt ist, dass Sie NoSQL-Datenbanken so wie sie sind verwenden müssen, nicht als (billige) Alternative zu RDBMS. Ich habe zu viele Projekte gesehen, die die Beziehungen zwischen Dokumenten missbrauchen. Dies kann keine Säure sein. Wenn Sie auf Dokumentebene bleiben, dh an aggregierten Grenzen, benötigen Sie keine Transaktion. Und Ihre Daten sind so sicher wie bei einer ACID-Datenbank, auch wenn sie nicht wirklich ACID sind, da Sie diese Transaktionen nicht benötigen! Wenn Sie Transaktionen benötigen und mehrere "Dokumente" gleichzeitig aktualisieren, befinden Sie sich nicht mehr in der NoSQL-Welt - verwenden Sie stattdessen eine RDBMS-Engine!
Einige Aktualisierungen für 2019: Ab Version 4.0 bietet MongoDB für Situationen, in denen Aktualisierungen für mehrere Dokumente oder Konsistenz zwischen Lesevorgängen für mehrere Dokumente erforderlich sind, Transaktionen mit mehreren Dokumenten für Replikatsätze an .
quelle
FoundationDB ist ACID-konform:
http://www.foundationdb.com/
Es verfügt über ordnungsgemäße Transaktionen, sodass Sie mehrere unterschiedliche Datenelemente auf ACID-Weise aktualisieren können. Dies wird als Grundlage für die Aufrechterhaltung von Indizes auf einer höheren Ebene verwendet.
quelle
In dieser Frage muss jemand OrientDB erwähnen : OrientDB ist eine NoSQL-Datenbank, eine der wenigen, die vollständig ACID-Transaktionen unterstützt. ACID ist nicht nur für RDBMS gedacht, da es nicht Teil der relationalen Algebra ist. Es ist also möglich, eine NoSQL-Datenbank zu haben, die ACID unterstützt.
Diese Funktion vermisse ich am meisten in MongoDB
quelle
ACID und NoSQL sind vollständig orthogonal. Eins impliziert nicht das andere.
Ich habe ein Notizbuch auf meinem Schreibtisch, mit dem ich Notizen zu Dingen mache, die ich noch tun muss. Dieses Notizbuch ist eine NoSQL-Datenbank. Ich frage es mit einer linearen Suche mit einem "Seiten-Cache" ab, damit ich nicht immer jede Seite durchsuchen muss. Es ist auch ACID-konform, da ich sicherstelle, dass ich immer nur eine Sache gleichzeitig schreibe und niemals, während ich sie lese.
NoSQL bedeutet einfach, dass es kein SQL ist. Viele Menschen sind verwirrt und denken, dass dies eine hochskalierbare Wild-West-Super-Fast-Speicherung bedeutet. Das tut es nicht. Dies bedeutet nicht, dass Schlüsselwerte gespeichert werden oder dass eine eventuelle Konsistenz besteht. Alles was es bedeutet ist "nicht SQL", es gibt viele Datenbanken auf diesem Planeten und die meisten von ihnen sind nicht SQL [Zitieren erforderlich] .
In den anderen Antworten finden Sie viele Beispiele, daher muss ich sie hier nicht auflisten. Es gibt jedoch Nicht-SQL-Datenbanken mit ACID-Konformität für verschiedene Vorgänge. Einige sind nur ACID für Einzelobjektschreibvorgänge, während andere weitaus mehr garantieren. Jede Datenbank ist anders.
quelle
"NoSQL" ist kein genau definierter Begriff. Es ist ein sehr vages Konzept. Daher ist es nicht einmal möglich zu sagen, was ein "NoSQL" -Produkt ist und was nicht. Nicht fast alle Produkte, die typischerweise mit dem Etikett versehen sind, sind Schlüsselgeschäfte.
quelle
Ja, MarkLogic Server ist eine NoSQL-Lösung (Dokumentendatenbank, die ich gerne nenne), die mit ACID-Transaktionen funktioniert
quelle
Der Großvater von NoSQL: ZODB ist ACID-konform. http://www.zodb.org/
Es ist jedoch nur Python.
quelle
Als einer der Urheber von NoSQL (ich war ein früher Mitarbeiter von Apache CouchDB und Redner bei der ersten NoSQL-Veranstaltung bei CBS Interactive / CNET im Jahr 2009) bin ich gespannt, wie neue Algorithmen Möglichkeiten schaffen, die es vorher nicht gab . Das Calvin-Protokoll bietet eine neue Möglichkeit, physikalische Einschränkungen wie CAP und PACELC zu berücksichtigen .
Anstelle der aktiven / passiven asynchronen Replikation oder der aktiven / aktiven synchronen Replikation bewahrt Calvin die Korrektheit und Verfügbarkeit bei Replikationsausfällen, indem ein RAFT-ähnliches Protokoll zur Verwaltung eines Transaktionsprotokolls verwendet wird. Darüber hinaus werden Transaktionen bei jedem Replikat deterministisch verarbeitet , wodurch das Potenzial für Deadlocks beseitigt wird, sodass eine Einigung mit nur einer einzigen Konsensrunde erzielt wird. Dies macht es auch bei weltweiten Bereitstellungen mit mehreren Clouds schnell.
FaunaDB ist die einzige Datenbankimplementierung, die das Calvin-Protokoll verwendet. Damit eignet es sich hervorragend für Workloads, die eine Mainframe-ähnliche Datenintegrität mit NoSQL-Skalierung und Flexibilität erfordern.
quelle
Wenn Sie nach einem ACID-kompatiblen Schlüssel- / Wertspeicher suchen, gibt es Berkeley DB . Unter Graph - Datenbanken mindestens Neo4j und HyperGraphDB bieten ACID - Transaktionen (HyperGraphDB tatsächlich nutzt Berkeley DB für Low-Level - Speicher im Moment).
quelle
NewSQL
Dieses Konzept, das Wikipedia-Mitwirkende definieren, definiert als:
Verweise
[1]
Nancy Lynch und Seth Gilbert, "Brewers Vermutung und die Machbarkeit konsistenter, verfügbarer, partitionstoleranter Webdienste" , ACM SIGACT News, Band 33, Ausgabe 2 (2002), S. 51-59.[2]
"Brewer's CAP Theorem" , julianbrowne.com, abgerufen am 02. März 2010[3]
"Brewers CAP-Theorem auf verteilten Systemen" , royans.netquelle
MongoDB gab bekannt, dass seine Version 4.0 ACID-konform für Transaktionen mit mehreren Dokumenten sein wird.
Version 4.2. soll es unter Sharded-Setups unterstützen.
https://www.mongodb.com/blog/post/multi-document-transactions-in-mongodb
quelle
FoundationDB wurde erwähnt und war zu diesem Zeitpunkt noch kein Open Source. Es wurde vor zwei Tagen von Apple als Open-Source-Version bereitgestellt: https://www.foundationdb.org/blog/foundationdb-is-open-source/
Ich glaube, es ist ACID-konform.
quelle
Schauen Sie sich den CAP-Satz an
EDIT: RavenDB scheint ACID-konform zu sein
quelle
So fügen Sie in die Liste der Alternativen, andere vollständig ACID - kompatible Datenbank NoSQL ist GT.M .
quelle
Hyperdex Warp http://hyperdex.org/warp/ Warp (ACID-Funktion) ist proprietär, Hyperdex ist jedoch kostenlos.
quelle
db4o
http://www.db4o.com/about/productinformation/db4o/
quelle
Tarantool ist eine vollständig ACID NoSQL-Datenbank. Sie können CRUD-Operationen oder gespeicherte Prozeduren ausgeben. Alles wird unter strikter Übereinstimmung mit einer ACID-Eigenschaft ausgeführt. Sie können darüber auch hier lesen: http://stable.tarantool.org/doc/mpage/data-and-persistence.html
quelle
MarkLogic ist auch ACID-konform. Ich denke, ist einer der größten Spieler jetzt.
quelle
Warten ist vorbei.
ACID-konforme NoSQL- Datenbank ist nicht verfügbar ----------- Schauen Sie sich Citrusleaf an
quelle
BergDB ist eine leichte Open-Source-NoSQL-Datenbank, die von Anfang an für die Ausführung von ACID-Transaktionen entwickelt wurde. Tatsächlich ist BergDB "mehr" ACID als die meisten SQL-Datenbanken in dem Sinne, dass die einzige Möglichkeit , den Status der Datenbank zu ändern, darin besteht, ACID-Transaktionen mit der höchsten Isolationsstufe auszuführen (SQL-Begriff: "serialisierbar"). Es wird niemals Probleme mit Dirty Reads, nicht wiederholbaren Reads oder Phantom Reads geben.
Meiner Meinung nach ist die Datenbank immer noch sehr leistungsfähig. Aber vertrau mir nicht, ich habe die Software erstellt. Probieren Sie es stattdessen selbst aus.
quelle
Viele moderne NoSQL-Lösungen unterstützen keine ACID-Transaktionen (atomar isolierte Multi-Key-Updates), aber die meisten unterstützen Grundelemente, mit denen Sie Transaktionen auf Anwendungsebene implementieren können.
Wenn ein Datenspeicher die Linearisierbarkeit pro Schlüssel und das Vergleichen und Festlegen (Atomizität auf Dokumentebene) unterstützt, reicht es aus, clientseitige Transaktionen zu implementieren. Darüber hinaus haben Sie mehrere Optionen zur Auswahl:
Wenn Sie eine serialisierbare Isolationsstufe benötigen, können Sie denselben Algorithmus verwenden, den Google für das Percolator- System oder Cockroach Labs für CockroachDB verwendet . Ich habe darüber gebloggt und eine schrittweise Visualisierung erstellt . Ich hoffe, es wird Ihnen helfen, die Hauptidee hinter dem Algorithmus zu verstehen.
Wenn Sie hohe Konflikte erwarten, die Isolationsstufe "Read Committed" jedoch in Ordnung ist, werfen Sie einen Blick auf die RAMP-Transaktionen von Peter Bailis.
Der dritte Ansatz besteht darin, kompensierende Transaktionen zu verwenden, die auch als Saga-Muster bezeichnet werden. Es wurde in den späten 80ern in der Zeitung Sagas beschrieben, wurde jedoch mit der Einführung verteilter Systeme aktueller. Inspiration finden Sie im Vortrag Anwenden des Saga-Musters .
Die Liste der Datenspeicher, die für clientseitige Transaktionen geeignet sind, umfasst Cassandra mit einfachen Transaktionen, Riak mit konsistenten Buckets, RethinkDB, ZooKeeper, Etdc, HBase, DynamoDB, MongoDB und andere.
quelle
YugaByte DB unterstützt eine ACID-konforme verteilte TXN sowie Redis- und CQL-API-Kompatibilität auf der Abfrageebene.
quelle
VoltDB ist ein Anbieter, der behauptet, ACID-konform zu sein, und obwohl SQL weiterhin verwendet wird, sind seine Ziele hinsichtlich der Skalierbarkeit dieselben
quelle
Während es sich nur um eine eingebettete Engine und nicht um einen Server handelt, verfügt leveldb über WriteBatch und die Möglichkeit, synchrone Schreibvorgänge zu aktivieren, um ACID-Verhalten bereitzustellen.
quelle
Node levelUP ist transaktional und basiert auf leveldb https://github.com/rvagg/node-levelup#batch
quelle
Google Cloud Datastore ist eine NoSQL-Datenbank, die ACID-Transaktionen unterstützt
quelle
DynamoDB ist eine NoSQL-Datenbank und verfügt über ACID-Transaktionen .
quelle
Nicht nur NoSQL ist vom Design her nicht ACID-konform. Die NoSQL-Bewegung umfasst die BASE (Grundsätzlich verfügbar, weicher Zustand, eventuelle Konsistenz), die angeblich das Gegenteil von ACID ist. NoSQL-Datenbanken werden häufig als eventuell konsistente Datenbank bezeichnet. Um die Unterschiede zu verstehen, sollten Sie einen Drilldown in den CAP-Satz (auch bekannt als Brewer-Satz) durchführen.
Besuchen Sie http://www.julianbrowne.com/article/viewer/brewers-cap-theorem
quelle