46 votes

Nombre de lignes d'une famille de colonnes dans Cassandra

Existe-t-il un moyen d'obtenir le nombre de lignes (nombre de clés) d'une famille de colonnes unique dans Cassandra ? get_count ne peut être utilisé que pour obtenir le nombre de colonnes.

Par exemple, si j'ai une famille de colonnes contenant des utilisateurs et que je veux obtenir le nombre d'utilisateurs. Comment pourrais-je le faire ? Chaque utilisateur a sa propre ligne.

39voto

Justin DeMaris Points 406

Si vous travaillez sur un grand ensemble de données et que vous êtes d'accord avec une approximation assez bonne, je recommande fortement d'utiliser la commande :

nodetool --host <hostname> cfstats

Cela va produire une liste pour chaque famille de colonnes qui ressemblera à ceci :

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 ligne "Nombre de clés (estimation)" est une bonne estimation pour l'ensemble du cluster et les performances sont beaucoup plus rapides que les approches de comptage explicite.

6voto

jbellis Points 16235

Si vous utilisez un partitionneur préservant l'ordre, vous pouvez le faire avec get_range_slice ou get_key_range.

Si vous ne l'êtes pas, vous devrez stocker vos identifiants d'utilisateur dans une ligne spéciale.

5voto

ajjain Points 253

J'ai trouvé un excellent article sur ce sujet ici http://www.planetcassandra.org/blog/post/counting-keys-in-cassandra

select count(*) from cf limit 1000000

La déclaration ci-dessus peut être utilisée si nous avons une limite supérieure approximative connue à l'avance. J'ai trouvé cela utile dans mon cas.

2voto

Ben Burns Points 4058

[Modifier : cette réponse n'est plus d'actualité depuis Cassandra 0.8.1. Entrée des compteurs dans le Wiki Cassandra pour connaître la manière correcte de gérer les colonnes de comptage dans Cassandra].

Je suis novice en matière de Cassandra, mais j'ai beaucoup travaillé avec le moteur d'applications de Google. Si aucune autre solution ne se présente, vous pouvez envisager de conserver un compteur séparé dans une plateforme qui prend en charge les opérations d'incrémentation atomique comme memcached. Je sais que Cassandra travaille sur une fonctionnalité d'incrémentation/décrémentation atomique du compteur, mais elle n'est pas encore prête pour le prime time.

Je ne peux poster qu'un seul hyperlien parce que je suis nouveau, donc pour les progrès du soutien au comptoir, voir le lien dans mon commentaire ci-dessous.

Notez que ce fil de discussion suggère ZooKeeper, memcached, et redis comme solutions possibles. Ma préférence personnelle irait à memcached.

http://www.mail-archive.com/user@cassandra.apache.org/msg03965.html

0voto

Dean Hiller Points 5292

Il y a toujours map/reduce, mais cela va sans dire. Si vous avez cela avec hive ou pig, alors vous pouvez le faire pour n'importe quelle table à travers le cluster, bien que je ne sois pas sûr que les tasktrackers connaissent la localité de cassandra et donc qu'ils doivent diffuser la table entière à travers le réseau, donc vous avez des task trackers sur des nœuds cassandra mais les données qu'ils reçoivent peuvent provenir d'un autre nœud cassandra :(. J'aimerais savoir si quelqu'un en est sûr.

NOTE : Nous mettons en place le map/reduce sur cassandra principalement parce que si nous voulons un index plus tard, nous pouvons en map/reduce un dans cassandra.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X