Sto provando a impostare una famiglia di colonne cassandra con indici secondari su alcune colonne che dovrò filtrare durante la lettura dei dati. Nei miei test iniziali, quando uso più indici contemporaneamente, le cose rallentano. Ecco come l'ho configurato attualmente (via cassandra-cli):Indici composti in Apache Cassandra
update column family bulkdata with comparator=UTF8Type and column_metadata=[{column_name: test_field, validation_class: UTF8Type}, {column_name: create_date, validation_class: LongType, index_type: KEYS}, {column_name: domain, validation_class: UTF8Type, index_type: KEYS}];
voglio ottenere tutti i dati in cui create_date> somevalue1 e column_name = somevalue2. Utilizzando pycassa per il mio cliente faccio la seguente:
domain_expr = create_index_expression('domain', 'whatever.com')
cd_expr = create_index_expression('create_date', 1293650000, GT)
clause = create_index_clause([domain_expr, cd_expr], count=10000)
for key, item in col_fam.get_indexed_slices(clause):
...
Questo è un errore comune in SQL, naturalmente, dove si sarebbe normalmente per creare un indice composto, in base alle esigenze di query. Sono abbastanza nuovo a Cassandra, quindi, non so se una cosa del genere sia richiesta o esista.
Le mie interazioni con cassandra includeranno un numero elevato di scritture e un gran numero di letture e aggiornamenti. Ho creato gli indici per capire che erano la cosa giusta da fare qui, ma forse ho torto completamente. Sarei interessato a qualsiasi idea per la creazione di un sistema performante, con la mia configurazione dell'indice o senza.
oh, e questo è in cassandra 0.7.0-RC3
È normale che più clausole per aumentare il tempo di query, entro limiti ragionevoli. Puoi dare maggiori dettagli? Quante righe hai inserito? Quale distribuzione di valori tra le colonne che stai interrogando? – jbellis
Per ora, i valori sono tutti dati casuali all'interno di un intervallo. Per i miei test finora ho circa 1 milione di righe. Per i dati nei coulmi, create_date è randomizzato in modo che tutti i valori siano all'interno dello stesso anno, il dominio è un nome di dominio preso a caso da un elenco di 8 e test_field è un carattere casuale. – Jake