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:
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 :
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.
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.
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 .
FoundationDB ist ACID-konform:
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.
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
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.
"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.
Ja, MarkLogic Server ist eine NoSQL-Lösung (Dokumentendatenbank, die ich gerne nenne), die mit ACID-Transaktionen funktioniert
Der Großvater von NoSQL: ZODB ist ACID-konform. http://www.zodb.org/
Es ist jedoch nur Python.
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).
Dieses Konzept, das Wikipedia-Mitwirkende definieren, definiert als:
[…] 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]
[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.net
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
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.
So fügen Sie in die Liste der Alternativen, andere vollständig ACID - kompatible Datenbank NoSQL ist GT.M .
Hyperdex Warp http://hyperdex.org/warp/ Warp (ACID-Funktion) ist proprietär, Hyperdex ist jedoch kostenlos.
db4o
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
MarkLogic ist auch ACID-konform. Ich denke, ist einer der größten Spieler jetzt.
Warten ist vorbei.
ACID-konforme NoSQL- Datenbank ist nicht verfügbar ----------- Schauen Sie sich Citrusleaf an
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.
YugaByte DB unterstützt eine ACID-konforme verteilte TXN sowie Redis- und CQL-API-Kompatibilität auf der Abfrageebene.
VoltDB ist ein Anbieter, der behauptet, ACID-konform zu sein, und obwohl SQL weiterhin verwendet wird, sind seine Ziele hinsichtlich der Skalierbarkeit dieselben
Node levelUP ist transaktional und basiert auf leveldb https://github.com/rvagg/node-levelup#batch
DynamoDB ist eine NoSQL-Datenbank und verfügt über ACID-Transaktionen .
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