有没有办法在Cassandra中获得单个列族的行计数(键计数)?get_count只能用于获取列数.
例如,如果我有一个包含用户的列系列,并希望获得用户数.我怎么能这样做?每个用户都是自己的行.
如果您正在处理一个大型数据集,并且可以使用相当不错的近似值,我强烈建议您使用以下命令:
nodetool --hostcfstats
这将为每个列族转储一个列表,如下所示:
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
"密钥数(估计)"行是群集中的一个很好的猜测,性能比显式计数方法快得多.
如果您使用的是保留订单的分区程序,则可以使用get_range_slice或get_key_range执行此操作.
如果不是,则需要将用户ID存储在特殊行中.
我在这里找到了一篇很好的文章.. http://www.planetcassandra.org/blog/post/counting-keys-in-cassandra
从cf limit 1000000中选择count(*)
如果我们预先知道已知的近似上限,则可以使用上述语句.我发现这对我的情况很有用.