如果我唯一能得到的就是 com.datastax.driver.core.Session
,有没有办法从远程服务器获得cassandra表中行数的粗略估计?数数太贵了。我知道我可以通过jmx获得分区计数估计,但我不想假设jmx已经配置好了(我认为结果必须乘以节点数,再除以复制因子。)理想情况下,估计值也包括集群键,但一切都在表中。
我还看到在系统键空间中有一个size\u estimates表,但是我没有看到太多关于它的文档。它是定期刷新还是管理员需要运行类似于 nodetool flush
?
除了不包括集群密钥之外,使用这个作为一个非常粗略的估计有什么问题?
select sum(partitions_count)
from system.size_estimates
where keyspace_name='keyspace' and table_name='table';
1条答案
按热度按时间yv5phkfx1#
大小估计值每5分钟在计时器上更新一次(可以用
-Dcassandra.size_recorder_interval
).这是一个非常粗略的估计,但是您可以从分区键的标记中找到它所属的范围,并从该表中提取每个副本(它的本地复制和每个节点的唯一性,而不是全局性),然后划分分区的大小和数量,以获得非常模糊的分区大小近似估计值。即使在写入此表之前,此路径中也会出现许多假设和平均值。Cassandra在效率方面的错误是以准确度为代价的,它更适合于像Spark批量阅读这样的一般用途,所以对此持保留态度。
它现在没有用,但展望未来4.0冻结后将有许多新的虚拟表,其中可能包括根据需要获得特定分区和分区范围的准确统计信息的表。