2010-06-04 2 views
25

Sto passando attraverso apache cassandra e lavorando su inserimento dati di esempio, recupero ecc.Cassandra - supporto transazioni

La documentazione è molto limitata.

Sono interessato a conoscere

  • possiamo sostituire completamente relazione db come MySQL/Oracle con Cassandra?
  • non supporta il rollback/commit?
  • i client cassandra (parsimonia/hector) supportano il recupero dell'oggetto associato (oggetti in cui si salva una chiave di super colonne in un'altra famiglia di super colonne)?

Questo mi aiuterà molto a procedere ulteriormente.

grazie in anticipo.

risposta

26

Risposta breve: No.

In base alla progettazione, Cassandra valori di disponibilità e la partizione di tolleranza oltre la consistenza 1. Fondamentalmente, non è possibile ottenere una latenza accettabile mantenendo tutte e tre le qualità: una deve essere sacrificata. Questo è chiamato teorema CAP.

La quantità di coerenza è configurabile in Cassandra utilizzando i livelli di coerenza, ma non esiste alcuna semantica per il rollback. Non c'è garanzia che sarete in grado di ripristinare le modifiche anche se la prima scrittura ha esito positivo.

Se non si desidera creare un'applicazione con transazioni o blocchi su Cassandra, probabilmente si desidera esaminare Zookeeper, che può essere utilizzato per fornire la sincronizzazione distribuita.

Si potrebbe aver già indovinato, ma Cassandra non ha chiavi esterne o qualcosa del genere. Questo deve essere gestito manualmente. Non sono così familiare con Hector, ma un client di livello superiore potrebbe essere in grado di farlo in modo semi-automatico.

Se è possibile utilizzare Cassandra per sostituire facilmente un RDBMS dipende dal caso d'uso specifico. Nel tuo caso d'uso (basato sulle tue domande), potrebbe essere difficile farlo.

+0

Grazie Lautis. Dopo aver considerato tutte le caratteristiche, abbiamo deciso di non andare per cassandra e attenerci al database relazionale. –

+1

Buona discussione sulla mailing list di cassandra sulle transazioni: http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/best-practices-for-simulating-transactions-in-Cassandra-td7064256.html – Zanson

+0

Grazie. Bella risposta! – Amresh

2

Se Zookeeper è in grado di gestire transazioni con qualità Oracle, è un affare fatto. Le relazioni e l'integrità delle relazioni non sono un problema da implementare su QUALSIASI database. Una chiave esterna è solo un altro campo dati. ACID/Transazioni è il problema chiave.

+0

Non sono d'accordo che la chiave esterna sia solo un altro campo dati. Il tipo di applicazione implementato nei database SQL gestisce quando i dati vengono cancellati da un'altra connessione proprio quando la connessione sta tentando di farvi riferimento. Rifiuterà correttamente una delle connessioni. Come si imporrebbe questo quando si implementa nel livello superiore, senza il blocco/la sincronizzazione delle risorse che influisce anche sulle prestazioni? –

5

Nella versione 2.x è possibile combinare le istruzioni CQL nel registro batch che è atomico. Tutte o tutte o nessuna delle affermazioni hanno successo. Inoltre puoi leggere su lightweight transactions. Più di questo - ci sono diversi gestori di persistenza per Cassandra. Puoi ottenere il comportamento di chiavi esterne a livello di client con loro. Ad esempio, Achilles e Kundera.