2016-01-14 13 views
8

In particolare stavo guardando this page in cui si dice:Quali sono le implicazioni dell'utilizzo di transazioni leggere?

Se le operazioni leggeri sono utilizzati per scrivere in una riga all'interno di una partizione, solo le operazioni leggeri per entrambe le operazioni di lettura e scrittura devono essere utilizzati.

Sono confuso su come utilizzare le LWT per operazioni di lettura. Nello specifico, questo si riferisce ai livelli di coerenza per-query (e serialConsistency).

Il description per SERIAL lettura coerenza solleva altre domande:

Permette la lettura dello stato attuale (e probabilmente non impegnati) di dati senza proporre una nuova aggiunta o aggiornamento.

Ciò suggerisce che l'utilizzo di SERIAL per le letture non "utilizza un LWT".

Ma poi

  • Come fa Cassandra sa per verificare la presenza di transazioni in corso quando si esegue una lettura?
  • Qual è il nuovo aggiornamento proposto mentre si sta tentando di leggere e in che modo ciò influisce sulla lettura?
  • Come funzionerebbe se la coerenza che stai leggendo (ad esempio ONE per esempio) è inferiore alla serialConsistency utilizzata per la scrittura?
  • Una volta che si utilizza un LWT su un tavolo (o riga? O colonna?), Tutte le letture non SERIAL sono obbligate a prendere la penalità di partecipare ai quorum e all'algoritmo di transazione?
  • Il requisito si applica effettivamente all'intera riga o solo alle colonne coinvolte nell'istruzione condizionale?

Se ignoro questo consiglio e faccio letture/scritture sia seriali che non seriali. In che modo le LWT falliscono?

+0

Correlato: http://stackoverflow.com/q/28836083/476716 – OrangeDog

risposta

6

In che modo Cassandra è in grado di verificare le transazioni in corso quando si esegue una lettura da ?

Questo è esattamente ciò che indica il livello di coerenza SERIAL. Si assicura che una query restituirà risultati solo dopo che tutte le transazioni in sospeso sono state eseguite completamente.

Qual è il nuovo aggiornamento che viene proposto mentre si sta tentando di leggere, e in che modo ciò influisce sulla lettura?

Penso che quello che il doc sta cercando di dire è che la lettura verrà gestita proprio come un LWT - solo senza apportare aggiornamenti sul proprio.

Come funzionerebbe se la coerenza che stai leggendo (ad esempio UNO per esempio) è inferiore alla serialConsistency utilizzata per la scrittura?

Le letture che utilizzano SERIAL implicano sempre QUORUM come livello di coerenza. La lettura con ONE non fornirà alcuna garanzia fornita da SERIAL e si può finire per leggere i dati bloccati.

Una volta che si utilizza un LWT su una tabella (o riga? O colonna?), Tutte le letture non SERIAL sono obbligate a prendere la penalità di partecipare ai quorum e all'algoritmo di transazione?

No. È possibile utilizzare i livelli di coerenza non SERIAL per le query e farli eseguire con le stesse caratteristiche di prestazioni di qualsiasi altra query non seriale.

Il requisito si applica effettivamente all'intera riga o solo alle colonne coinvolte nell'istruzione condizionale?

No, penso che si dovrebbe andare bene finchè si usano colonne diverse per letture/scritture seriali (comprese le condizioni) e letture/scritture regolari.

Se ignoro questo consiglio e faccio letture/scritture sia seriali che non. In che modo le LWT falliscono?

Se si eseguono scritture regolari, non eseguite come parte di un LWT, tali scritture verranno applicate in qualsiasi momento, senza interferire con il processo di consenso delle LWT. Di conseguenza, le scritture regolari possono in teoria modificare un valore che fa parte di una condizione LWT in un momento tra la valutazione della condizione e l'applicazione dell'aggiornamento, che è una potenziale causa di incoerenze che si desidera evitare di utilizzare LWT.

+0

Le LWT vengono sempre eseguite nel contesto di una chiave di partizione. –

+1

"Le letture che utilizzano SERIAL implicano sempre QUORUM come livello di coerenza." Sei sicuro? Forse dipende dall'autista. Da Java datastax ConsistencyLevel # isSerial codice sorgente: https://www.insight.io/github.com/datastax/java-driver/blob/3.x/driver-core/src/main/java/com/datastax/ driver/core/ConsistencyLevel.java, "Indipendentemente dal fatto che questo livello di coerenza sia seriale, vale a dire si applica solo alla fase" paxos "di una transazione leggera". – skeller88

Problemi correlati