database - tutorial - Recuento de filas de una familia de columnas en Cassandra
cassandra windows (6)
Encontré un excelente artículo sobre esto aquí .. http://www.planetcassandra.org/blog/post/counting-keys-in-cassandra
seleccionar conteo (*) desde el límite cf 1000000
La instrucción anterior se puede usar si tenemos un límite superior aproximado conocido de antemano. Lo encontré útil para mi caso.
¿Hay alguna manera de obtener un recuento de filas (recuento de claves) de una sola familia de columnas en Cassandra? get_count solo se puede usar para obtener el conteo de columnas.
Por ejemplo, si tengo una familia de columnas que contiene usuarios y quiero obtener la cantidad de usuarios. ¿Cómo podría hacerlo? Cada usuario es su propia fila.
He estado recibiendo los conteos de esta manera después de convertir los datos en un hash en PHP.
Si está trabajando en un gran conjunto de datos y está bien con una aproximación bastante buena, le recomiendo usar el comando:
nodetool --host <hostname> cfstats
Esto arrojará una lista para cada familia de columnas que se vea así:
Column Family: widgets
SSTable count: 11
Space used (live): 4295810363
Space used (total): 4295810363
Number of Keys (estimate): 9709824
Memtable Columns Count: 99008
Memtable Data Size: 150297312
Memtable Switch Count: 434
Read Count: 9716802
Read Latency: 0.036 ms.
Write Count: 9716806
Write Latency: 0.024 ms.
Pending Tasks: 0
Bloom Filter False Postives: 10428
Bloom Filter False Ratio: 1.00000
Bloom Filter Space Used: 18216448
Compacted row minimum size: 771
Compacted row maximum size: 263210
Compacted row mean size: 1634
La fila "Número de claves (estimación)" es una buena estimación en todo el clúster y el rendimiento es mucho más rápido que el conteo explícito.
Si está utilizando un particionador que preserva la orden, puede hacerlo con get_range_slice o get_key_range.
Si no es así, deberá almacenar sus identificadores de usuario en una fila especial.
Siempre hay un mapa / reducir pero eso es evidente. Si tienes eso con colmena o cerdo, puedes hacerlo para cualquier tabla del clúster, aunque no estoy seguro de que los tracktrackers conozcan la localidad de cassandra, por lo que puede tener que transmitir toda la tabla a través de la red para que tengas rastreadores de tareas en cassandra nodos pero los datos que reciben pueden ser de otro nodo de cassandra :(. Me encantaría saber si alguien lo sabe con certeza.
NOTA: estamos configurando map / reduce en cassandra principalmente porque si queremos un índice más adelante, podemos asignar / reducir uno en cassandra.
[Editar: Esta respuesta está desactualizada a partir de Cassandra 0.8.1 - consulte la entrada de Contadores en la Wiki de Cassandra para conocer la forma correcta de manejar columnas de mostrador en Cassandra.]
Soy nuevo en Cassandra, pero me he metido mucho con App Engine de Google. Si no se presenta ninguna otra solución, puede considerar mantener un contador separado en una plataforma que admita operaciones de incremento atómico como memcached. Sé que Cassandra está trabajando en la funcionalidad de incremento / disminución del contador atómico, pero aún no está lista para el horario de máxima audiencia.
Solo puedo publicar un hipervínculo porque soy nuevo, así que para avanzar en el soporte del contador, vea el enlace en mi comentario a continuación.
Tenga en cuenta que este hilo sugiere ZooKeeper, memcached y redis como posibles soluciones. Mi preferencia personal sería memcached.