Esiste un archivio dati NoSQL conforme ACID?


156

Esiste un archivio dati NoSQL conforme ACID ?


2
In realtà c'era FoundationDB che era compatibile con l'acido. Ora Apple l'ha afferrato
l'utente senza cappello il

Risposte:


110

Pubblicherò questo come una risposta puramente a supporto della conversazione: Tim Mahy , Nawroth e CraigTP hanno suggerito database praticabili. CouchDB sarebbe il mio preferito a causa dell'uso di Erlang , ma ce ne sono altri là fuori.

Direi che ACID non contraddice o nega il concetto di NoSQL ... Mentre sembra che ci sia una tendenza che segue l'opinione espressa da Dove , direi che i concetti sono distinti.

NoSQL si basa fondamentalmente sul semplice schema chiave-valore (ad esempio Redis) o sullo stile di documento (coppie chiave-valore raccolte in un modello di "documento", ad esempio MongoDB) come alternativa diretta allo schema esplicito nei classici RDBMS. Permette allo sviluppatore di trattare cose in modo asimmetrico, mentre i motori tradizionali hanno imposto la stessa rigidità nel modello di dati. Il motivo per cui è così interessante è perché offre un modo diverso di gestire i cambiamenti e per insiemi di dati più grandi offre interessanti opportunità per gestire volumi e prestazioni.

ACID fornisce i principi che regolano il modo in cui le modifiche vengono applicate a un database. In un modo molto semplificato, afferma (la mia versione):

  • (A) quando fai qualcosa per cambiare un database, la modifica dovrebbe funzionare o fallire nel suo insieme
  • (C) il database dovrebbe rimanere coerente (questo è un argomento piuttosto ampio)
  • (I) se altre cose stanno succedendo allo stesso tempo, non dovrebbero essere in grado di vedere le cose durante l'aggiornamento
  • (D) se il sistema esplode (hardware o software) il database deve essere in grado di riprendersi; e se dice che ha finito di applicare un aggiornamento, deve essere certo

La conversazione diventa un po 'più eccitabile quando si tratta dell'idea di propagazione e vincoli . Alcuni motori RDBMS offrono la possibilità di imporre vincoli (ad es. Chiavi esterne) che possono avere elementi di propagazione (a cascata ). In termini più semplici, una "cosa" potrebbe avere una relazione con un'altra "cosa" nel database e, se si modifica un attributo di uno, potrebbe essere necessario modificare l'altro (aggiornato, eliminato, ... molte opzioni). I database NoSQL , essendo prevalentemente (al momento) focalizzati su elevati volumi di dati e traffico elevato, sembrano affrontare l'idea di aggiornamenti distribuiti che avvengono all'interno (dal punto di vista del consumatore) di intervalli di tempo arbitrari. Questa è sostanzialmente una forma specializzata di transazione di replica gestita tramite - quindi direi che se un database distribuito tradizionale può supportare ACID, così può fare un database NoSQL.

Alcune risorse per ulteriori letture:


15
Buona risposta. Puoi avere sia NoSQL + ACID che non ACID-RDBMS (pensa a MySQL + MyISAM). Di solito considererei NoSQL come "eventualmente coerente". Aggiungerò anche il teorema della PAC ... :-)
gbn

+1 @gbn per la menzione del teorema della PAC. Avere più familiarità con i db "nosql" di quanto non fossi allora ha solo rafforzato la separazione dei concetti. Inoltre, database chiave-valore vs doc, poiché esistono differenze architettoniche.
AJ.

-1 per la menzione del teorema di CAP, dovremmo bruciarlo. Si prega di leggere https://martin.kleppmann.com/2015/05/11/please-stop-calling-d
database

36

AGGIORNAMENTO (27 luglio 2012): il collegamento all'articolo Wikipedia è stato aggiornato per riflettere la versione dell'articolo che era attuale al momento della pubblicazione di questa risposta. Si prega di notare che l' attuale articolo di Wikipedia è stato ampiamente rivisto!

Bene, secondo una versione precedente di un articolo di Wikipedia su NoSQL :

NoSQL è un movimento che promuove una classe vagamente definita di archivi di dati non relazionali che si infrangono con una lunga storia di database relazionali e garanzie ACID.

e anche:

Il nome era un tentativo di descrivere l'emergere di un numero crescente di archivi di dati distribuiti non relazionali che spesso non tentavano di fornire garanzie ACID.

e

I sistemi NoSQL forniscono spesso garanzie di coerenza debole come l'eventuale coerenza e transazioni limitate a singoli elementi di dati, anche se è possibile imporre garanzie ACID complete aggiungendo un livello middleware supplementare.

Quindi, in breve, direi che uno dei principali vantaggi di un archivio dati "NoSQL" è la sua netta mancanza di proprietà ACID . Inoltre, IMHO, più si cerca di implementare e applicare le proprietà ACID , più lontano dallo "spirito" di un archivio dati "NoSQL" si ottiene e più si avvicina a un "vero" RDBMS che si ottiene (relativamente parlando, ovviamente ).

Tuttavia, tutto ciò che ha detto, "NoSQL" è un termine molto vago ed è aperto a interpretazioni individuali e dipende fortemente da quanto di un punto di vista purista hai. Ad esempio, la maggior parte dei nostri giorni RDBMS sistemi in realtà non aderiscono a tutti di Edgar F. Codd 's 12 regole del suo modello di relazione !

Adottando un approccio pragmatico, sembrerebbe che il CouchDB di Apache si avvicini di più all'incarnazione di entrambi gli ACID-compliance mantenendo allo stesso tempo una mentalità "NoSQL" non accoppiata.


1
+1 Non sono sicuro di essere d'accordo con la mancanza di ACID come caratteristica chiave di "NoSQL", ma apprezzo molto il tuo commento. In definitiva, dovrebbe trattarsi di una soluzione adatta.
AJ.

2
Ho modificato (in attesa di revisione) per cercare di rendere ancora più chiaro. Non c'è nulla nei modelli di dati NoSQL che implicano che le transazioni ACID non siano possibili. Alcuni sistemi distribuiti NoSQL non li hanno. Alcuni effettivamente non hanno alcun "livello di middleware".
Eric Bloch,

2
Questo non è mai stato corretto e ha persino perso la sua fonte. Dovrebbe davvero essere eliminato.
Lennart Regebro,

2
Bene, evidentemente, questo: "in poche parole, direi che uno dei principali vantaggi di un archivio dati" NoSQL "è la sua netta mancanza di proprietà ACID". Implichi anche che NoSQL e ACID in qualche modo si escludano a vicenda, il che è decisamente errato. Questo è un buon esempio di quando un gran numero di persone ignoranti ha espresso una risposta errata perché sembra ragionevole. Il fatto che la maggior parte dei database NoSQL non sia compatibile con ACID è principalmente perché le persone implementate non sapevano cosa fosse / perché fosse importante / non gliene importava.
Lennart Regebro,

@LennartRegebro - Non ho insinuato nulla del genere. La conformità agli ACID è stata infatti smentita dalla maggior parte degli attuali database NoSQL a favore della velocità / prestazioni e dell'eventuale coerenza. Non ho mai detto che non si potrebbe avere NoSQL con conformità ACID, però.
CraigTP,

20

Assicurati di leggere l'introduzione di Martin Fowler sui database NoSQL . E il video corrispondente.

Innanzitutto, possiamo distinguere due tipi di database NoSQL:

  1. Database orientati agli aggregati;
  2. Database orientati ai grafici (ad es. Neo4J).

In base alla progettazione, la maggior parte dei database orientati ai grafici sono ACID !

Quindi, per quanto riguarda gli altri tipi?

Nei database orientati agli aggregati, possiamo inserire tre sottotipi:

  • Database NoSQL basati su documenti (ad esempio MongoDB, CouchDB);
  • Database NoSQL chiave / valore (ad es. Redis);
  • Database NoSQL della famiglia di colonne (ad es. Hibase, Cassandra).

Ciò che qui chiamiamo un aggregato , è ciò che Eric Evans ha definito nel suo design guidato dal dominio come autosufficiente di entità e oggetti valore in un dato contesto limitato.

Di conseguenza, un aggregato è una raccolta di dati con cui interagiamo come unità. Gli aggregati formano i limiti per le operazioni ACID con il database. (Martin Fowler)

Quindi, a livello di aggregazione, possiamo dire che la maggior parte dei database NoSQL può essere sicura come ACID RDBMS , con le impostazioni appropriate. Di origine, se ottimizzi il tuo server per la massima velocità, potresti entrare in qualcosa di non ACID. Ma la replica aiuterà.

Il mio punto principale è che devi usare i database NoSQL così come sono, non come alternativa (economica) a RDBMS. Ho visto troppi progetti abusare delle relazioni tra documenti. Questo non può essere ACID. Se rimani a livello di documento, ovvero a confini aggregati, non hai bisogno di alcuna transazione. E i tuoi dati saranno al sicuro come con un database ACID, anche se non veramente ACID, dal momento che non hai bisogno di quelle transazioni! Se hai bisogno di transazioni e aggiorni più "documenti" contemporaneamente, non sei più nel mondo NoSQL - usa invece un motore RDBMS!

alcuni aggiornamenti del 2019: a partire dalla versione 4.0, per situazioni che richiedono atomicità per gli aggiornamenti di più documenti o coerenza tra le letture di più documenti, MongoDB fornisce transazioni multi-documento per set di repliche .



Ci sono casi in cui esiste un grande processo / saga che gestisce molti aggregati. Ci sono casi in cui un comando inviato a un aggregato potrebbe innescare alcuni eventi che cambiano altri aggregati. In questi casi sono necessari archivi di dati conformi ACID.
Tudor,

1
@TudorTudor ma in questo caso stai infrangendo uno dei principi nosql, poiché lo stai usando come rdbms. Hai solo bisogno di aggregati più grandi o di versioning dei documenti (come in couchdb). I db orientati ai documenti di Nosql sono acidi ai confini documento / aggregato.
Arnaud Bouchez,

Nessuno di quelli elencati è compatibile con l'acido. Mongo possiede solo non essere compatibile ACID. CouchDB finge di essere compatibile con l'acido purché non si aggiornino due documenti. Redis ha solo "supporto parziale per le transazioni". HBase non è compatibile con l'acido (dagli sviluppatori) , né Cassandra. Questa risposta è in realtà solo sbagliata. Nessuno di questi database supporta ACID e la maggior parte di essi lo possiede apertamente con una semplice ricerca su Google.
Evan Carroll,

@EvanCarroll Non ho mai scritto che MongoDB è conforme ACID, nello stesso significato di una transazione RDBMS ACID. Non è disponibile alcuna transazione. Quello che ho scritto è che la maggior parte dei database NoSQL può essere sicura come ACID RDBMS, con le impostazioni appropriate . Ad esempio, controllare l' operatore $ isolato MongoDB per un DB senza alcun cluster condiviso. Non userei mai MongoDB per il processo finanziario, ma potrei fidarmi del suo processo di scrittura in una certa misura, per operazioni simili all'ACID, se A per Atomicity fosse sufficiente. Scusa se la mia risposta è confusa.
Arnaud Bouchez,

18

FoundationDB è conforme ACID:

http://www.foundationdb.com/

Dispone di transazioni appropriate, quindi è possibile aggiornare più elementi di dati diversi in modo ACID. Questo è usato come base per mantenere gli indici ad un livello superiore.


6
purtroppo non è open source. Ma sembra un database molto carino.
Kevin Cox,

Per aggiungere una risposta a @ Ken-Tindell, djondb è anche NoSQL e implementa le transazioni ed è conforme all'ACID. djondb.com Concordo sul fatto che NoSQL è solo un termine per coniare tutti i database che non seguono le regole tradizionali del RDBMS, non significa "sbarazzarsi dei sistemi TX", o dimenticare le relazioni.
Attraversare il

3
La mia risposta è stata resa discutibile dall'acquisizione di Foundation DB da parte di Apple.
Ken Tindell,

1
foundationdb è ora open source di Apple
RBanerjee

17

In questa domanda qualcuno deve menzionare OrientDB : OrientDB è un database NoSQL, uno dei pochi, che supporta transazioni completamente ACID. ACID non è solo per RDBMS perché non fa parte dell'algebra relazionale. Quindi è possibile avere un database NoSQL che supporti ACID.

Questa funzione è quella che mi manca di più in MongoDB


Open source principalmente github.com/orientechnologies/orientdb ma ha funzionalità enterprise chiuse
basarat

14

ACID e NoSQL sono completamente ortogonali. Uno non implica l'altro.

Ho un taccuino sulla mia scrivania, lo uso per tenere appunti su cose che devo ancora fare. Questo notebook è un database NoSQL. Lo interrogo usando una ricerca lineare con una "cache di pagina", quindi non devo sempre cercare ogni pagina. È inoltre conforme ACID, poiché mi assicuro di scrivere solo una cosa alla volta e mai mentre la sto leggendo.

NoSQL significa semplicemente che non è SQL. Molte persone si confondono e pensano che significhi archiviazione estremamente scalabile-selvaggio-ovest-super-veloce. Non Non significa archivio valori-chiave o eventuale coerenza. Tutto ciò che significa è "non SQL", ci sono molti database in questo pianeta e la maggior parte di essi non sono SQL [citazione necessaria] .

Puoi trovare molti esempi nelle altre risposte, quindi non ho bisogno di elencarli qui, ma ci sono database non SQL con conformità ACID per varie operazioni, alcuni sono solo ACID per le scritture di singoli oggetti mentre altri garantiscono molto di più. Ogni database è diverso.


3
Solo per essere pedanti, ma di solito significa 'Non solo SQL' :-)
shmish111

4
@ shmish111 non proprio. Significava "No SQL" quando il termine fu coniato per la prima volta. La "o" è piccola, dopo tutto non è maiuscola. In seguito ci furono tentativi di ricomporre il termine "Non solo SQL" quando alcuni di questi (prodotti NoSQL) iniziarono ad aggiungere interfacce di linguaggio di query simili a SQL.
ypercubeᵀᴹ

11

"NoSQL" non è un termine ben definito. È un concetto molto vago. Pertanto, non è nemmeno possibile dire cosa sia e cosa non sia un prodotto "NoSQL". Non quasi tutti i prodotti tipicamente marchiati con l'etichetta sono negozi di valore-chiave.


3
Migliore risposta. Ogni volta che si presenta questa guerra delle fiamme, mi piace chiedere all'altra parte quali caratteristiche di definizione richiedono esplicitamente da un database NoSQL e spesso si sovrappone a quelle che possono trovare in un RDBMS - non perché uno o RDBMS si adattano al tema NoSQL ma semplicemente perché il loro i "requisiti" delle funzionalità sono così vaghi che non negano del tutto, funzionalità che si trovano in RDMBS (non tutte necessariamente). +1 per il tuo commento amico!
StartUp Acquista il

8

Sì, MarkLogic Server è una soluzione NoSQL (database di documenti che mi piace chiamarlo) che funziona con le transazioni ACID


1
MarkLogic ha transazioni ACID, transazioni multi-documento, transazioni multi-dichiarazione e supporto per XA, tutte a livello di cluster / distribuite.
Eric Bloch,

8

Il nonno di NoSQL: ZODB è conforme ACID. http://www.zodb.org/

Tuttavia, è solo Python.


1
Per coloro che cercano di passare dalla libreria "shelve" di Python, ho trovato ZODB quasi apparente. Non ho avuto bisogno di riscrivere tutte le mie funzioni: basta accedere a ZODB come dizionario proprio come shelve, ma è un ordine di grandezza più veloce.
Michael Galaxy,

8

Come uno dei creatori di NoSQL (sono stato uno dei primi collaboratori di Apache CouchDB e un relatore al primo evento NoSQL tenutosi alla CBS Interactive / CNET nel 2009) sono entusiasta di vedere nuovi algoritmi creare possibilità che prima non esistevano . Il protocollo Calvin offre un nuovo modo di pensare a vincoli fisici come CAP e PACELC .

Invece della replica asincrona attiva / passiva o della replica sincrona attiva / attiva, Calvin mantiene la correttezza e la disponibilità durante le interruzioni della replica utilizzando un protocollo simile a RAFT per mantenere un registro delle transazioni. Inoltre, le transazioni vengono elaborate in modo deterministico in ogni replica, eliminando il potenziale per deadlock, quindi l'accordo viene raggiunto con un solo giro di consenso. Questo lo rende veloce anche su distribuzioni multi-cloud in tutto il mondo.

FaunaDB è l'unica implementazione di database che utilizza il protocollo Calvin, rendendolo adatto in modo univoco ai carichi di lavoro che richiedono integrità dei dati simili a mainframe con scalabilità e flessibilità NoSQL.



4

NewSQL

Questo concetto che i contributori di Wikipedia definiscono come:

[...] una classe di moderni sistemi di gestione di database relazionali che cercano di fornire le stesse prestazioni scalabili dei sistemi NoSQL per i carichi di lavoro di lettura-scrittura di elaborazione delle transazioni online (OLTP), pur mantenendo le garanzie ACID di un sistema di database tradizionale.[1][2][3]

Riferimenti

[1]Nancy Lynch e Seth Gilbert, "Congettura di Brewer e fattibilità di servizi web coerenti, disponibili e tolleranti alla partizione" , ACM SIGACT News, Volume 33 Numero 2 (2002), pag. 51-59.

[2] "Brewer's CAP Theorem" , julianbrowne.com, recuperato il 02-mar-2010

[3] "Teorema di Brewers CAP su sistemi distribuiti" , royans.net




3

dai un'occhiata al teorema della PAC

EDIT: RavenDB sembra essere conforme ACID






2

MarkLogic è anche compatibile ACID. Penso che sia uno dei più grandi giocatori ora.


1

L'attesa è finita.

NoSQL DB conforme ACID è disponibile ----------- dai un'occhiata a agrumi


Aerospike supporta le transazioni ACID multi-chiave? AKAIK è limitato alla transazione a chiave singola.
eonil

1

BergDB è un database NoSQL leggero e open source progettato dall'inizio per eseguire transazioni ACID. In realtà, BergDB è "più" ACID rispetto alla maggior parte dei database SQL, nel senso che l' unico modo per cambiare lo stato del database è eseguire transazioni ACID con il livello di isolamento più elevato (termine SQL: "serializzabile"). Non ci saranno mai problemi con letture sporche, letture non ripetibili o letture fantasma.

A mio avviso, il database è ancora altamente performante; ma non fidarti di me, ho creato il software. Provalo tu stesso.


1

Molte moderne soluzioni NoSQL non supportano le transazioni ACID (aggiornamenti multi-chiave isolati atomici), ma la maggior parte di esse supporta primitive che consentono di implementare transazioni a livello di applicazione.

Se un archivio dati supporta la linearizzabilità per chiave e il confronto e l'insieme (atomicità a livello di documento), è sufficiente implementare le transazioni sul lato client, oltre a te hai diverse opzioni tra cui scegliere:

  1. Se hai bisogno di un livello di isolamento serializzabile, puoi seguire lo stesso algoritmo utilizzato da Google per il sistema Percolator o Cockroach Labs per CockroachDB . Ne ho scritto un blog e ho creato una visualizzazione dettagliata , spero che ti possa aiutare a capire l'idea principale dietro l'algoritmo.

  2. Se ti aspetti un alto livello di contesa, ma per te va bene avere il livello di isolamento Read Committed, dai un'occhiata alle transazioni RAMP di Peter Bailis.

  3. Il terzo approccio consiste nell'utilizzare transazioni compensative note anche come modello di saga. È stato descritto alla fine degli anni '80 nel documento Sagas , ma è diventato più attuale con l'aumento dei sistemi distribuiti. Si prega di consultare il discorso sull'applicazione del modello Saga per ispirazione.

L'elenco di archivi di dati adatti per le transazioni lato client include Cassandra con transazioni leggere, Riak con bucket coerenti, RethinkDB, ZooKeeper, Etdc, HBase, DynamoDB, MongoDB e altri.



0

VoltDB è un concorrente che rivendica la conformità ACID e mentre utilizza ancora SQL, i suoi obiettivi sono gli stessi in termini di scalabilità


2
Il creatore di VoltDB ha detto che non si etichettano come NoSql ma più come NewSql (ancora usando Sql ma con una migliore implementazione di quelle RDBM costruite negli anni ottanta)
Matt W

0

Sebbene sia solo un motore incorporato e non un server, leveldb ha WriteBatch e la possibilità di attivare le scritture sincrone per fornire un comportamento ACID.





-1

Non solo NoSQL non è conforme alla progettazione ACID. Il movimento NoSQL abbraccia la BASE (disponibile in pratica, stato morbido, eventuale consistenza) dichiarata contraria all'ACID. I database NoSQL sono spesso chiamati database a consistenza finale. Per capire le differenze dovresti approfondire il teorema della CAP (alias teorema di Brewer)

Visita http://www.julianbrowne.com/article/viewer/brewers-cap-theorem


Penso che il puntatore al teorema della PAC sia molto rilevante per questa domanda!
mxro,

2
Alcuni database NoSQL hanno transazioni ACID.
Eric Bloch,

1
Alcuni noSQL dichiarano di essere ACID compatibili, ma quando si analizza in profondità si scopre che solo in alcuni casi particolari sono ACID, quindi IMHO in quanto non esiste un "eventualmente ACID", non sono sicuramente ACID
Ste

1
Stai fondamentalmente applicando erroneamente la PAC. CAP e ACID sono alquanto vagamente correlati, ma CAP non impedisce a un sistema distribuito di essere conforme ACID. CAP descrive i compromessi necessari di un sistema distribuito - un sistema NoSQL che è fortemente coerente potrebbe non essere disponibile durante una partizione, ma ciò non gli impedisce di essere conforme ACID.
Jeff Jirsa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.