2012-01-03 15 views
6

Voglio contare il numero totale di colonne per una riga Cassandra utilizzando il client Hector. Attualmente lo sto facendo con uno CountQuery, ma a me sembra molto lento. Anche per una fila, con solo 60k colonne ci vogliono circa 2 secondi. Il mio codice attualmente assomiglia a questo:Modo più veloce di contare il numero totale di colonne in una fila cassandra con hector

QueryResult<Integer> qr = HFactory.createCountQuery(ksp, se, se). 
    setColumnFamily("ColumnFamily1"). 
    setKey("RowKey"). 
    setRange(null, null, 1000000000).execute(); 

PS: devo impostare l'intervallo di un numero così elevato, altrimenti conta solo me max. al numero che ho fornito nell'intervallo.

Qualche idea su come posso migliorare questo?

risposta

8

Il conteggio delle colonne in Cassandra è intrinsecamente lento. Cassandra deve iterare su tutta la riga per restituire il conteggio.

Probabilmente si vuole denormalizzare il conteggio. Puoi utilizzare una colonna contatore che aggiorni ogni volta che inserisci.

+0

grazie. Non sapevo che avesse bisogno di scorrere l'intera fila. – High6

+0

È cambiato negli ultimi 4 anni? Voglio dire, ora cassandra mantiene alcuni metadati e può rapidamente restituire il numero di colonne che continua a scorrere su tutte le colonne? – Peter

+0

No, questo non è cambiato. Il motivo principale è tenere traccia di tali informazioni rallenterebbe il percorso di scrittura. – psanford

Problemi correlati