2012-03-16 8 views
8

Sto cercando di implementare un CF in Cassandra che ha file molto lunghe (da centinaia di migliaia a milioni di colonne per riga).Prestazioni di Cassandra per file lunghe

Utilizzando completamente dati fittizi, ho inserito 2 milioni di colonne in una singola riga (uniformemente distanziata). Se eseguo un'operazione a slice per ottenere 20 colonne, noterò un notevole peggioramento delle prestazioni man mano che si esegue l'operazione slice più in basso nella riga.

Con la maggior parte delle colonne, mi sembra di essere in grado di servire fino risultati fetta in 10-40ms, ma come si ottiene verso la fine della fila, prestazioni colpisce il muro, con tempi di risposta graduale aumento dal 43 ms al 1.800.000 marchi a 214ms a 1.900.000 e 435ms a 1.999.900! (Tutte le fette sono di uguale larghezza).

Non riesco a spiegare perché c'è un enorme degrado delle prestazioni quando arrivi alla fine della fila. Qualcuno può fornire qualche indicazione su ciò che Cassandra sta facendo internamente per fare un tale ritardo? Il caching delle righe è disattivato e praticamente tutto è un'installazione predefinita di Cassandra 1.0.

Si suppone che sia in grado di supportare fino a 2 miliardi di colonne per riga, ma a questo ritmo di incremento delle prestazioni si intende che non può essere utilizzato per file molto lunghe in una situazione pratica.

Molte grazie.

Attenzione, lo sto colpendo con 10 richieste in parallelo alla volta, motivo per cui sono un po 'più lento di quanto mi aspetterei in ogni caso, ma è un test corretto in tutte le richieste e anche solo eseguendole tutte in serie c'è questo strano degrado tra il 1.800.000 e il 190000 ° record.

Ho anche notato ESTREMAMENTE scarse prestazioni durante l'esecuzione di sezioni inverse per un singolo elemento con appena 200.000 colonne per riga: query.setRange (end, start, false, 1);

risposta

4

Il commento di psanford mi ha portato alla risposta. Si scopre che Cassandra 1.1.0 (attualmente in versione beta) ha prestazioni lente su slice su lunghe file in Memtable (che non sono stati scaricati su disco) ma prestazioni migliori su SSTables scaricate su disco con gli stessi dati.

vedere http://mail-archives.apache.org/mod_mbox/cassandra-user/201201.mbox/%[email protected].com%3E e https://issues.apache.org/jira/browse/CASSANDRA-3545.

Con il mio esempio, il primo 1.8 milioni di righe erano state scaricate su disco, quindi le fette su quell'intervallo erano veloci, ma le ultime ~ 200.000 righe non erano state scaricate su disco ed erano ancora in memoble. Dato che l'affettamento dei memobles è lento su file lunghe, questo è il motivo per cui ho visto prestazioni negative alla fine delle righe (i miei dati sono stati inseriti in ordine di colonna).

Questo può essere risolto chiamando manualmente un flush sui nodi cassandra. Una patch è stata applicata a 1.1.0 per risolvere questo problema e posso confermare che questo risolve il problema per me.

Spero che questo aiuti qualcun altro con lo stesso problema.

9

Una buona risorsa su questo è il post sul blog di Aaron Morton su Cassandra Reversed Comparators. Dall'articolo:

Ricordare dal mio post su Cassandra Query Plans che una volta che le righe raggiungono una certa dimensione includono un indice delle colonne. E che l'intero indice deve essere letto ogni volta che è necessario utilizzare qualsiasi parte dell'indice, come nel caso in cui si utilizzi un intervallo di sezioni che specifica l'inizio o il contrario. Quindi la query fetta più veloce da eseguire su una riga era quella che recuperava le prime X colonne di una riga solo specificando un conteggio di colonne.

Se state per lo più leggendo dalla fine di una riga (ad esempio se si archiviano le cose con il timestamp e per lo più si desidera guardare i dati più recenti) è possibile utilizzare la Reversed Comparator che memorizza le colonne in ordine decrescente. Questo ti darà prestazioni di query molto migliori (e più consistenti).

Se i tuoi schemi di lettura sono più casuali, potrebbe essere meglio ripartire i dati su più righe.

+0

Grazie per la risposta psanford! Mi conduce nella direzione corretta e ora ho trovato qual era il problema (vedi sotto) – agentgonzo

+0

Sai se questo è ancora vero per la versione corrente 1.1.7? – Sisso

Problemi correlati