当前位置:  开发笔记 > 开发工具 > 正文

Cassandra中列族的行数

如何解决《Cassandra中列族的行数》经验,为你挑选了3个好方法。

有没有办法在Cassandra中获得单个列族的行计数(键计数)?get_count只能用于获取列数.

例如,如果我有一个包含用户的列系列,并希望获得用户数.我怎么能这样做?每个用户都是自己的行.



1> Justin DeMar..:

如果您正在处理一个大型数据集,并且可以使用相当不错的近似值,我强烈建议您使用以下命令:

nodetool --host  cfstats

这将为每个列族转储一个列表,如下所示:

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

"密钥数(估计)"行是群集中的一个很好的猜测,性能比显式计数方法快得多.


密钥数量不是特定节点的估计值,而不是整个集群的估计值?
'nodetool --host cfstats'给了我https://gist.github.com/cdwijayarathna/e6b4d3d7d8c272fcfd24,但是没有属性'Key of Keys',这是什么原因?

2> jbellis..:

如果您使用的是保留订单的分区程序,则可以使用get_range_slice或get_key_range执行此操作.

如果不是,则需要将用户ID存储在特殊行中.


你是对的,计算原始对象在分布式系统中相对比你习惯于在一个只能在本地内存中保存索引的系统而言相对昂贵.
如果我有数百万行怎么办?get_range_slice对于简单的计数操作感觉有点沉重.我对吗?

3> ajjain..:

我在这里找到了一篇很好的文章.. http://www.planetcassandra.org/blog/post/counting-keys-in-cassandra

从cf limit 1000000中选择count(*)

如果我们预先知道已知的近似上限,则可以使用上述语句.我发现这对我的情况很有用.


糟糕的解决方案:在大表上你会得到rpc_timeout,因为它会扫描所有表
推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有