2015-06-25 20 views
7

Scrivere i dati su Cassandra senza causarne la creazione di pietre tombali è di vitale importanza nel nostro caso, a causa della quantità di dati e velocità. Al momento abbiamo solo scritto una riga una volta e non abbiamo mai avuto bisogno di aggiornare nuovamente la riga, recuperando solo i dati.Sovrascrivi la riga in cassandra con INSERT, causerà la pietra tombale?

Ora c'è stato un caso, in cui abbiamo effettivamente bisogno di scrivere dati, e poi completarlo con più dati, che è finito dopo un po '. Può essere fatto da entrambi;

  1. sovrascrivere tutti i dati in una riga utilizzando nuovamente INSERTO (tutti i dati sono disponibili), o

  2. eseguendo un aggiornamento solo sui nuovi dati.

Qual è il modo migliore per farlo, tenere a mente la velocità e non creare una lapide è importante?

risposta

7

Le pietre tombali vengono create solo quando si eliminano i dati o si utilizzano valori TTL.

Cassandra si allinea molto bene al caso d'uso descritto. L'aggiunta incrementale di dati funzionerà sia per le istruzioni INSERT che UPDATE. Cassandra memorizzerà i dati in posizioni diverse in caso di aggiunta di dati nel tempo per la stessa chiave di partizione. Le compazioni periodicamente in esecuzione uniranno nuovamente i dati per una singola chiave per ottimizzare l'accesso e liberare spazio su disco. Questo avverrà in base al timestamp dei valori scritti, ma non crea nuove pietre tombali. Puoi saperne di più su come Cassandra memorizza i dati, ad es. here.

+0

bel modo per creare lapidi è aggiornare la stessa chiave di partizione attorno a 1000 tipi che ha 2 o 3 colonne di tipo di raccolta e ogni volta 1 aggiornamento di 100 elementi – Anonymous

2

Sarebbe più efficiente effettuare un aggiornamento per aggiungere dati nuovi o modificati. Non è necessario riscrivere i vecchi dati che non cambiano e sarebbe inefficiente rendere Cassandra riscrivibile.

Quando si esegue un inserimento o un aggiornamento, Cassandra mantiene un timestamp per il tempo di modifica per ogni colonna. Quando si esegue una lettura, Cassandra raccoglie tutte le scritture per quella chiave da in memoria, da su disco e da altre repliche a seconda dell'impostazione di coerenza. Quindi unirà i dati della colonna in modo che venga utilizzato il valore più recente per ogni colonna.

Quando i dati vengono compattati su disco, se vi sono aggiornamenti separati per colonne diverse di una riga, questi verranno combinati in una singola riga nei dati compattati.

Non è necessario preoccuparsi di creare lapidi eseguendo un aggiornamento a meno che non si stia utilizzando un aggiornamento per impostare un valore TTL (Time To Live). Nella tua applicazione sembra che tu non abbia mai cancellato i dati, quindi non avrai mai nessuna lapide.