Existe-t-il un moyen d'obtenir un nombre de lignes (nombre de clés) d'une famille à une colonne 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 voulant obtenir le nombre d'utilisateurs. Comment pourrais-je le faire? Chaque utilisateur est sa propre ligne.
Si vous travaillez sur un ensemble de données volumineux et que vous avez une bonne approximation, je vous recommande vivement d'utiliser la commande suivante:
nodetool --Host <hostname> cfstats
Cela affichera une liste de chaque famille de colonnes ressemblant à 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)" permet de deviner les performances du cluster et les performances sont bien plus rapides que les méthodes de décompte explicites.
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 sur une ligne spéciale.
J'ai trouvé un excellent article à ce sujet ici .. http://www.planetcassandra.org/blog/post/counting-keys-in-cassandra
sélectionnez le nombre (*) de cf limite 1000000
L'énoncé ci-dessus peut être utilisé si nous avons une limite supérieure approximative connue d'avance. J'ai trouvé cela utile pour mon cas.
[Edit: Cette réponse est obsolète à partir de Cassandra 0.8.1 - veuillez consulter l’entrée Compteurs dans le wiki de Cassandra pour connaître la méthode appropriée pour gérer les colonnes de compteurs dans Cassandra.]
Je suis nouvelle dans Cassandra, mais j'ai beaucoup bousillé avec App Engine de Google. Si aucune autre solution ne se présente, vous pouvez envisager de conserver un compteur séparé sur une plate-forme prenant en charge les opérations d'incrémentation atomique telles que memcached. Je sais que Cassandra travaille sur la fonctionnalité d’incrémentation/décrémentation de compteur atomique, mais elle n’est pas encore prête pour les heures de grande écoute.
Je ne peux publier qu'un seul lien hypertexte car je suis nouveau. Pour en savoir plus sur les services d'assistance, voir le lien dans mon commentaire ci-dessous.
Notez que ce fil suggère ZooKeeper, memcached et redis comme solutions possibles. Ma préférence personnelle serait mémorisée.
Il y a toujours carte/réduire mais cela va probablement de soi. Si vous avez cela avec Hive ou pig, vous pouvez le faire pour n’importe quelle table du cluster, même si je ne suis pas sûr que les suiveurs de tâches connaissent la localité de Cassandra et qu’il faudra peut-être alors diffuser toute la table sur le réseau pour obtenir des suivis de tâches sur cassandra. Les nœuds mais les données qu'ils reçoivent peuvent provenir d'un autre nœud de cassandra :(. J'aimerais bien savoir si quelqu'un le sait avec certitude.
NOTE: Nous mettons en place map/reduction sur cassandra principalement parce que si nous voulons un index plus tard, nous pouvons le mapper/réduire en cassandra.