I database NoSQL possono causare occasionali perdite di dati?


8

Attualmente sto valutando i database da utilizzare per un nuovo progetto, che richiederà l'inserimento e l'interrogazione di grandi quantità di dati commerciali. Il nostro team si sta avvicinando a Cassandra, ma poi ho letto questo articolo che sembra suggerire che l'uso di database non ACID compatibili può causare la perdita occasionale di dati:

http://www.dbms2.com/2010/09/21/acid-compliant-transaction-integrity/

Non riesco a trovare ulteriori informazioni al riguardo sul Web e non riesco a capire in che modo la conformità non ACID comporti la perdita dei dati. Qualcuno può fare luce?


Neo4j è un database NOSQL (grafico) che è in realtà conforme ACID . Viene fornito con supporto completo per le transazioni e persistenza duratura. Neo4j utilizza anche i registri delle transazioni per proteggere le operazioni di scrittura prima di applicarle all'archivio dati. Disclaimer: lavoro per Neo Technology.
Michael Hunger,

3
Secondo la legge di Murphy (e la mia esperienza) puoi perdere dati con qualsiasi database.
a_horse_with_no_name

Una frase migliore potrebbe essere "i database NoSQL hanno una probabilità significativamente maggiore di perdita o corruzione dei dati rispetto al tradizionale RDBMS?" Ancora un po 'vago.
Jon of All Trades,

Diversi prodotti NoSQL offrono ACIDity a riga singola. Pochi offrono ACID multi-riga. Se il tuo caso d'uso è un flusso di scrittura a chiave singola, allora puoi riuscire. In molte aree aziendali è importante avere più righe coerenti contemporaneamente prima di effettuare una modifica.
Michael Green,

Risposte:


6

ACIDO significa

  • Atomicita
  • Consistenza
  • Isolamento
  • durabilità

Ciò che questo significa per te è "ogni azione di scrittura verrà eseguita una sola volta (nessun record duplicato) ma verrà completamente archiviata nel database al termine dell'azione" e che ogni volta che leggerai, otterrai i dati che desideri .

Il vantaggio dei database NoSQL è che sono spesso distribuiti (questo è ciò che la gente desidera, sistemi scalabili piatti a basso costo), il che significa che ci vuole tempo per replicare i dati su tutti i nodi. A volte è possibile leggere durante una scrittura e finire con i vecchi dati mentre i nuovi dati stanno uscendo.

Stai sacrificando la purezza per la velocità.

Questa è la versione breve della mia risposta e non sono sicuro di cosa devo spiegare ulteriormente. Fammi delle domande!


1
Quello che stai descrivendo suona come consistenza immediata (RDBMS) vs. eventuale consistenza (NoSQL). Tuttavia, l'articolo collegato parla della perdita effettiva di dati (non semplicemente di dati incoerenti) e non capisco cosa la conformità ACID abbia a che fare con la perdita di dati.
del

1
Durabilità molto probabilmente. E questo è il caso, è quello che sto descrivendo (il che fa sembrare che i dati siano andati persi). Il punto di ACID è che non puoi perdere dati. Mai. (beh, potrebbe essere perso per danni)
jcolebrand

Tutti i database NoSQL che ho cercato (HBase, Cassandra, Redis) utilizzano registri write-ahead che possono essere riprodotti nel caso in cui il database si blocchi prima che le modifiche siano state mantenute. Ciò significa che questa critica non si applica a nessuno di questi database?
del

Immagino di si. Lo rivedrò domani, ma per ora, ora di andare a letto. Spero che tu abbia qualche altro input oltre al mio prima di allora ;-)
jcolebrand

6

Anche se questa è una domanda vecchia di anni ...

In breve, puoi comprendere ACID come garanzia di integrità / sicurezza dei dati in qualsiasi circostanza prevista . Come nella programmazione generica, tutti i mal di testa provengono dal multi-threading.

Il problema più grande su NoSQL è principalmente ACI. D (urabilità) è di solito un problema separato.

Se il tuo DB è a thread singolo - quindi solo un utente può accedere contemporaneamente -, è nativamente conforme ACI. Ma sono sicuro che praticamente nessun server può avere questo lusso.

Se il tuo DB deve essere multi-thread - servire più utenti / client contemporaneamente - è necessario disporre di una transazione conforme ACI. Oppure otterrai una corruzione silenziosa dei dati anziché una semplice perdita di dati. Il che è molto più orribile. Semplicemente, questo è esattamente lo stesso con la programmazione multi-thread generica. Se non si dispone di un meccanismo adeguato come il blocco, si otterranno dati non definiti. E il meccanismo in DB chiamato conformità completamente ACID .

Molti database YesSQL / NoSQL si pubblicano come compatibili con ACID, ma in realtà pochissimi di loro lo fanno davvero.

  • Nessuna conformità ACID = Otterrai un risultato sempre indefinito nell'ambiente multiutente (client). Non penso nemmeno che tipo di DB faccia questo.

  • Riga singola / chiave Conformità ACID = Otterrai un risultato garantito se modifichi solo un singolo valore alla volta. Ma risultato indefinito (= danneggiamento silenzioso dei dati) per l'aggiornamento simultaneo di più righe / chiavi. La maggior parte dei DB NoSQL attualmente popolari, inclusi Cassandra, MongoDB, CouchDB, ... Questo tipo di DB è sicuro solo per le transazioni a riga singola. Quindi è necessario garantire che la logica del DB non tocchi più righe in una transazione.

  • Conformità ACID a più righe / chiavi = Otterrete sempre risultati garantiti per qualsiasi operazione. Si tratta di requisiti minimi come RDBMS. Nel campo NoSQL, pochi di loro lo fanno. Spanner, MarkLogic, VoltDB, FoundationDB. Non sono nemmeno sicuro che ci siano più soluzioni. Questi tipi di DB sono davvero nuovi e nuovi, quindi non si sa quasi nulla delle loro capacità o limitazioni.

Comunque, questo è un confronto tranne D (urabilità). Quindi non dimenticare di controllare anche l'attributo di durabilità. È molto difficile confrontare la durabilità perché la gamma diventa troppo ampia. Non conosco bene questo argomento ...

  • Nessuna durata. Perderai i dati in qualsiasi momento.

  • Archiviato in modo sicuro su disco. Quando ottieni COMMIT OK, i dati sono garantiti sul disco. Hai perso i dati in caso di rottura del disco.

Inoltre, ci sono differenze anche sui DB conformi ACID.

  • A volte conforme ACID / è necessaria la configurazione / nessuna opzione automatica .. / alcuni componenti non sono compatibili ACID / molto veloci ma è necessario disattivare qualcosa per questo ... / conforme ACID se si utilizza un modulo specifico ... = noi non raggrupperà la sicurezza dei dati per impostazione predefinita. È un componente aggiuntivo, un'opzione o venduto separatamente. Non dimenticare di scaricare, assemblare, configurare ed emettere il comando corretto. Ad ogni modo, la sicurezza dei dati può essere ignorata silenziosamente. Fallo da solo. Controllalo tu stesso. Buona fortuna a non commettere errori. Tutti i membri del team devono essere DBA impeccabili per utilizzare questo tipo di DB in modo sicuro. MySQL.

  • Sempre conforme ACID = Non scambiamo la sicurezza dei dati con prestazioni o altro. La sicurezza dei dati è un pacchetto forzato con questo pacchetto DB. RDBMS più commerciale, PostgreSQL.

Sopra è la tipica implementazione di DB. Tuttavia, qualsiasi altro errore hardware può danneggiare il database. Come errore di memoria, errore del canale dati o altri possibili errori. Quindi è necessaria una ridondanza aggiuntiva e un DB di qualità di produzione reale deve offrire funzionalità di tolleranza agli errori.

  • Nessuna ridondanza. Si perdono tutti i dati se i dati sono danneggiati.

  • Backup. Si esegue la copia / ripristino dell'istantanea. Si perdono dati dopo l'ultimo backup.

  • Backup online. È possibile eseguire il backup dell'istantanea mentre il database è in esecuzione.

  • Replica asincrona. Backup per ogni secondo (o periodo specificato). Se la macchina è inattiva, questo DB ha garantito il recupero dei dati al solo riavvio. Si perdono dati dopo l'ultimo secondo.

  • Replica sincrona. Effettua immediatamente il backup per ogni aggiornamento dei dati. Hai sempre una copia esatta dei dati originali. Usa la copia se l'origine si interrompe.

Fino ad ora, vedo che l'implementazione di molti DB manca di molti di questi. E penso che se mancano il corretto supporto ACID e ridondanza, gli utenti alla fine perderanno i dati.


5

"Dipende" è la risposta: ci sono opzioni di configurazione, menzionate qui .

Piccolo nitpick: un database può essere durevole ma non conforme ACID, poiché ACID è il superset di funzionalità (ACID). Non credo che nessun database NoSQL possa affermare di essere completamente ACID, ma molti di loro potrebbero pretendere di superare i singoli requisiti secondari, come la durata.

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.