Qual è il significato di coerenza finale in Cassandra quando i nodi in un singolo cluster non contengono le copie degli stessi dati ma i dati vengono distribuiti tra i nodi. Ora dal momento che un singolo pezzo di dati è registrato in un singolo luogo (nodo). Perché Cassandra non dovrebbe restituire il valore recente da quel singolo luogo di registrazione? Come nascono più copie in questa situazione?Significato di coerenza finale in Cassandra?
risposta
Sta al cliente decidere il livello di coerenza appropriato (zero, qualsiasi, uno, quoram o tutti). (Il livello di coerenza controlla sia il comportamento in lettura che in scrittura in base al fattore di replica.) In un cluster a nodo singolo i livelli di coerenza uno, uno, il quorom e tutti sono equivalenti.
Anche con fattore di replica = 1, la coerenza non è necessariamente immediata poiché le scritture vengono memorizzate nel nodo sul quale vengono inviate e pertanto non vengono necessariamente inviate immediatamente al nodo responsabile di quella chiave.
Ma dipende dal livello di coerenza scelto.
Principalmente il caso d'uso per Cassandra è con fattore di replicazione> 1, che è dove la coerenza diventa più di un problema. RF = 3 sembra essere un ambiente comune (in quanto consente Quorum legge/scrive con un nodo non disponibile)
Quanto tempo può trascorrere prima che la scrittura venga svuotata dal memtable (buffer di memoria) sul disco (= al nodo responsabile)? – Kozuch
Ecco un bel spiegare circa alla fine coerente: http://www.allthingsdistributed.com/2008/12/eventually_consistent.html
Cassandra tende a compromettere la latenza e coerenza la disponibilità . È "alla fine coerente", un modello per la consistenza del database NoSQL che viene utilizzato con le impostazioni distribuite. Piuttosto che mantenere una coerenza rigorosa che potrebbe davvero rallentare le cose su scala, la coerenza finale consente un'elevata disponibilità, proprio al costo di ogni istanza dei dati che non vengono sincronizzati su tutti i server immediatamente.
La coerenza di Cassandra è regolabile. Cosa può essere sintonizzato?
* Numero di nodi necessari per concordare i dati per le letture .. chiamatelo R * Numero di nodi necessari per concordare i dati per le scritture .. chiamatelo W
In caso di 3 nodi, se abbiamo scelto 2R e 2W .. quindi durante una lettura, se 2 nodi sono d'accordo su un valore, questo è il valore vero. Il 3 maggio può o non può avere lo stesso valore.
In caso di scrittura, se viene scelto 2W, se i dati vengono scritti su 2 nodi, vengono considerati sufficienti. Questo modello è coerente.
Se R + w < = N dove N è il numero di nodi, alla fine sarà coerente.
Cassandra mantiene un timestamp con ogni colonna e ogni campo di colonna per diventare infine coerenti. C'è un meccanismo in background per raggiungere uno stato coerente.
Ma come ho detto, se R + W> N, allora è consistente solido. Ecco perché la coerenza è considerata sintonizzabile in Cassandra.
ma coerenza tra quali dati?, Dal momento che un singolo dato si trova in un unico punto in un cluster .. non ci sono più copie di dati ... quindi quale coerenza? –
su un cluster a nodo singolo non ci si deve preoccupare della coerenza (a meno che non si facciano scritture asincrone (CL.ZERO, non usare questo)). – Schildmeijer
mi spiace penso che tu mi abbia sbagliato .. Voglio dire in un cluster con diversi nodi, i dati sono distribuiti/sharded (e ** non replicati **) quindi non ci sono più copie di un singolo pezzo di dati tra diversi nodi nel cluster Cassandra n-node, quindi come viene definita la coerenza in questo caso in cui non c'è, infatti, nessuna copia multipla? ... spero che tu abbia capito il mio punto .. –