2012-01-03 44 views
6

Quiero contar el número total de columnas para una fila de Cassandra utilizando el cliente Hector. Actualmente estoy haciendo esto con un CountQuery, pero me parece realmente lento. También para una fila, con solo 60k columnas, toma cerca de 2 segundos. Mi código Actualmente tiene este aspecto:Forma más rápida de contar el número total de columnas en una fila de cassandra con hector

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

PD: Tengo para establecer el rango de un número tan alto, de lo contrario, sólo cuenta conmigo máx. al número que he proporcionado en el rango.

¿Alguna idea de cómo puedo mejorar esto?

Respuesta

8

Contando columnas en Cassandra es inherentemente lento. Cassandra tiene que iterar sobre toda la fila para devolver el conteo.

Es probable que desee desnormalizar el recuento. Puede usar una columna de contador que actualice cada vez que inserte.

+0

gracias. No sabía que necesita iterar sobre toda la fila. – High6

+0

¿Ha cambiado esto en los últimos 4 años? Quiero decir, ¿ahora cassandra conserva algunos metadatos y puede devolver rápidamente el número de columnas que aún repite en todas las columnas? – Peter

+0

No, esto no ha cambiado. La razón principal es hacer un seguimiento de esa información ralentizaría la ruta de escritura. – psanford

Cuestiones relacionadas