Sommario:
Video: Tecniche di Vendita - Frank Merenda e il Corso Venditore Vincente 2025
La proprietà consistenza di un database significa che una volta che i dati sono stati scritti correttamente in un database, le query che seguono sono in grado di accedere ai dati e ottenere una visualizzazione coerente dei dati. In pratica, ciò significa che se si scrive un record in un database e si richiede immediatamente quel record, si è sicuri di vederlo. È particolarmente utile per cose come ordini Amazon e bonifici bancari.
La coerenza è una scala scorrevole, tuttavia, e un argomento troppo profondo per essere coperto qui. Tuttavia, nel mondo NoSQL, la coerenza generalmente rientra in uno dei due campi:
-
Consistenza ACID (ACID sta per Atomicità, Consistenza, Isolamento, Durabilità): ACID significa che una volta scritti i dati, si ha piena coerenza in legge.
-
Eventuale coerenza (BASE): BASE significa che una volta scritti i dati, alla fine verrà visualizzato per la lettura.
Si è scatenata una battaglia tra persone che credono che una consistenza forte in un database non sia richiesta e coloro che credono che sia assolutamente necessario (tradurre persone in Aziende NoSQL "dipartimenti di marketing! ).
La realtà è una via di mezzo. È importante che il post di Facebook di una persona non venga visto da tutti i suoi amici per cinque minuti? No, probabilmente no. Cambia "Post di Facebook" in "transazioni finanziarie da un miliardo di dollari", però, e il tuo atteggiamento cambia rapidamente! Quale approccio di coerenza scegli dipende dalla situazione. Nella mia esperienza, tuttavia, una forte coerenza è sempre la scelta in situazioni di sistema aziendale mission-critical.
ACID
ACID è un insieme generale di principi per i sistemi transazionali, non qualcosa legato esclusivamente ai sistemi relazionali, o anche solo ai database, quindi vale la pena di saperlo. ACID significa fondamentalmente " Questo database ha le funzionalità per impedire di danneggiare o perdere dati, " che non è un dato per tutti i database. In effetti, la stragrande maggioranza dei database NoSQL non fornisce garanzie ACID.
Foundation DB, MarkLogic e Neo4j sono eccezioni notevoli. Alcuni database NoSQL forniscono una garanzia di livello inferiore denominata Verifica e imposta che verifica se qualcun altro ha modificato un documento prima di consentire il completamento di una transazione. Questo comportamento è solitamente limitato perché tende ad essere implementato su base record singola.
MongoDB è un database notevole che fornisce funzionalità di verifica e impostazione. Con MongoDB, un intero valore dei dati può essere bloccato durante un aggiornamento, impedendo in tal modo tutte le operazioni di lettura e tutte le operazioni di scrittura fino al completamento dell'operazione.L'azienda sta lavorando per rimuovere questa limitazione, però.
BASE
BASE significa che invece di fare garanzie ACID, il database ha un bilanciamento sintonizzabile di consistenza e disponibilità dei dati. Questo è in genere il caso in cui i nodi in un determinato cluster di database fungono da gestori primari di una parte del database e altri nodi contengono repliche di sola lettura.
Per garantire che tutti i client visualizzino tutti gli aggiornamenti (ovvero abbiano una visione coerente dei dati), una scrittura sul nodo primario che tiene i dati deve essere bloccata fino a quando tutte le repliche di lettura sono aggiornate. Questo è chiamato due - commit di fase - la modifica viene eseguita localmente ma applicata e confermata al client solo quando tutti gli altri nodi vengono aggiornati.
BASE rilassa questo requisito, richiedendo solo un sottoinsieme dei nodi che mantengono gli stessi dati da aggiornare affinché la transazione abbia successo. Qualche tempo dopo il commit della transazione, la replica di sola lettura viene aggiornata.
Il vantaggio di questo approccio è che le transazioni sono impegnate più velocemente. Avere repliche live leggibili significa anche che puoi diffondere il carico di lettura dei dati, rendendo la lettura più veloce.
Lo svantaggio è che i client che si connettono ad alcune delle repliche di lettura potrebbero visualizzare informazioni non aggiornate per un periodo di tempo non specificato. In alcuni scenari, questo stato va bene. Se pubblichi un nuovo messaggio su Facebook e alcuni dei tuoi amici non lo vedono per un paio di minuti, non è una perdita enorme. Se si invia un ordine di pagamento alla propria banca, tuttavia, è possibile che si desideri una transazione immediata.
Un approccio alternativo alle repliche di sola lettura consiste nell'avere un condiviso - niente cluster in cui solo un nodo su un cluster serve sempre una determinata parte del database.
Condiviso-nulla non significa che si perde la replica, però. I database che utilizzano questo metodo tipicamente replicano i propri dati in un'area secondaria su un altro nodo o nodi primari, ma solo un nodo è il master per le letture e le scritture in qualsiasi momento.
I cluster shared-nothing hanno il vantaggio di un modello di consistenza più semplice ma richiedono un commit a due fasi per le repliche. Questo fatto indica che la transazione si blocca mentre tutte le repliche vengono aggiornate. (Un blocco interno più blocco per altri nodi ti dà due fasi.)
Questo di solito ha meno impatto dei cluster di dati condivisi con repliche di sola lettura, tuttavia, poiché le aree di dati della replica shared-nothing non ricevono richieste di lettura per questo parte del database. Pertanto, i commit a due fasi sono più veloci su un cluster shared-nothing rispetto a un cluster con repliche leggibili.
Scegliere ACID o BASE?
Come ci si potrebbe aspettare, gran parte dell'argomento è perché i fornitori NoSQL possono differenziarsi rispetto ai loro concorrenti rivendicando un approccio diverso e unico. È interessante notare, tuttavia, il numero di venditori NoSQL con conformità ACID sulla loro roadmap.
Alcuni database NoSQL hanno la conformità ACID sulla loro tabella di marcia, anche se sono proponenti di BASE, che mostra quanto le garanzie ACID siano rilevanti per sistemi aziendali, di missione - critici .
Molte aziende usano prodotti di consistenza BASE quando testano le idee perché sono libere, ma poi migrano verso un database a pagamento compatibile con ACID quando vogliono andare in diretta su un sistema mission-critical.
Il modo più semplice per decidere se è necessario ACID è considerare le interazioni tra persone e altri sistemi con i dati. Ad esempio, se aggiungi o aggiorni dati, è importante che la prossima query sia in grado di vedere la modifica? In altre parole, le decisioni importanti dipendono dallo stato attuale del database? Vedendo dati leggermente obsoleti significa che quelle decisioni potrebbero essere fatalmente viziate?
Nei servizi finanziari, la necessità di coerenza è ovvia. Pensa ai commercianti che acquistano azioni. Hanno bisogno di controllare il saldo di cassa prima di fare trading per assicurarsi che abbiano i soldi per coprire il commercio. Se non vedono il giusto equilibrio, decidono di spendere soldi per un'altra transazione. Se il database che stanno interrogando è solo alla fine coerente, potrebbero non vedere una mancanza di fondi sufficienti, esponendo così la loro organizzazione al rischio finanziario.
Casi simili possono essere costruiti per ACID su BASE in sanità, difesa, intelligence e altri settori. Tutto si riduce ai dati, tuttavia, e all'importanza sia della tempestività che della sicurezza dei dati.
