如何使用Java客户端驱动程序在Cassandra中获取行数估算值

时间:2018-12-20 17:20:21

标签: cassandra

如果我唯一可以使用的是com.datastax.driver.core.Session,是否可以从远程服务器粗略估算Cassandra表中的行数?进行计数太昂贵了。我知道我可以通过JMX获得分区计数估计,但我不想假设JMX has been configured。 (我认为结果必须乘以节点数再除以复制因子。)理想情况下,估计值也应包括群集键,但所有内容都在表中。

我还看到有一个size_estimates table in the system keyspace,但是我看不到任何文档。是定期刷新还是管理员需要运行类似nodetool flush的东西?

除了不包括群集密钥之外,将其用作非常粗略的估计有什么问题?

select sum(partitions_count)
from system.size_estimates
where keyspace_name='keyspace' and table_name='table';

1 个答案:

答案 0 :(得分:2)

大小估算值每5分钟在计时器上更新一次(可由-Dcassandra.size_recorder_interval覆盖)。

这是一个非常粗略的估计,但是您可以从分区键的令牌中找到它所属的范围以及从该表中拉出的每个副本中的副本(它是本地复制,并且是每个节点唯一的,不是全局的),并且将分区的大小和数量划分为一个非常模糊的分区大小近似估计值。即使在写入此表之前,在此路径中也会发生如此多的假设和平均。 Cassandra出于效率方面的考虑而以准确性为代价,并且更多地用于诸如火花散装读取之类的常规用途,因此请带一点盐。

它现在没有用,但是展望4.0以后的冻结版本,将会有许多新的虚拟表,其中可能包括一些虚拟表,以便根据需要对分区的特定范围和范围进行准确的统计。