如何使用Java客户端驱动程序获得Cassandra中的行数估计

如何使用Java客户端驱动程序获得Cassandra中的行数估计,cassandra,Cassandra,如果我唯一可用的是com.datasax.driver.core.Session,有没有办法从远程服务器获得Cassandra表中行数的粗略估计?进行计数太昂贵了。我知道我可以通过JMX获得分区计数估计,但我不想假设。(我认为结果必须乘以节点数,再除以复制因子。)理想情况下,估计值也应该包括集群键,但一切都在表中 我也看到有一个,但我没有看到太多的文档。是定期刷新还是管理员需要运行类似于nodetool flush 除了不包括集群密钥之外,将此作为一个非常粗略的估计有什么错 select sum

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

我也看到有一个,但我没有看到太多的文档。是定期刷新还是管理员需要运行类似于
nodetool flush

除了不包括集群密钥之外,将此作为一个非常粗略的估计有什么错

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

计时器每5分钟更新一次大小估计值(可使用
-Dcassandra.size\u recorder\u interval
覆盖)

这是一个非常粗略的估计,但是您可以从分区键的标记中找到它在每个复制副本中和每个复制副本上所属的范围(它的本地复制,每个节点都是唯一的,而不是全局的),并划分分区的大小和数量,以获得分区大小的非常模糊的近似估计。在写入此表之前,此路径中会出现许多假设和平均值。卡桑德拉在效率方面的错误是以准确度为代价的,它更适合于一般用途,如火花批量阅读,所以对此持保留态度

它现在没有什么用处,但展望未来的4.0冻结后,将有许多新的虚拟表,可能包括一些可以根据需要获得特定分区和分区范围的准确统计信息的表