Cassandra 计数列,非常慢的CountQuery与SliceQuery操作

Cassandra 计数列,非常慢的CountQuery与SliceQuery操作,cassandra,hector,pelops,Cassandra,Hector,Pelops,我已经编写了一个“普查”程序来迭代一个列族中的所有行,并在每一行中对列进行计数,记录最大值和行键。我在Hector客户机上花了更多的时间,但我也写了一个Pelops客户机来测试 基本流程是使用一个RangeSlicesQuery遍历行,然后在每一行使用一个SliceQuery遍历并收集统计数据。在Pelops中工作类似,只是API不同。缺点是必须手动进行缓冲,为行和列选择缓冲区大小。。。我当前的数据是1200万行,最大列数约为25K,所以需要一段时间。。。在我当前的配置中,我每秒获得>25K行

我已经编写了一个“普查”程序来迭代一个列族中的所有行,并在每一行中对列进行计数,记录最大值和行键。我在Hector客户机上花了更多的时间,但我也写了一个Pelops客户机来测试

基本流程是使用一个RangeSlicesQuery遍历行,然后在每一行使用一个SliceQuery遍历并收集统计数据。在Pelops中工作类似,只是API不同。缺点是必须手动进行缓冲,为行和列选择缓冲区大小。。。我当前的数据是1200万行,最大列数约为25K,所以需要一段时间。。。在我当前的配置中,我每秒获得>25K行

寻找改进方法并发现Hector的CountQuery(我假设它使用Thrift客户端get_count()。考虑到只迭代键(使用RangeSlicesQuery.setReturnKeysOnly())然后对每个行键重新使用CountQuery会更快,我修改了代码

它不仅慢了,而且慢了30倍!(每秒仅处理900行)


有没有更好的方法来计算列数?

不确定赫克托到底发生了什么——我预计它会慢大约2倍,而不是30倍


更一般地说,使用计数器列保持非规范化计数可能比完整的CF扫描要好:

不确定Hector发生了什么——我预计它大约会慢2倍,而不是30倍


更一般地说,使用计数器列保持非规范化计数可能比完整的CF扫描要好:

我考虑跟踪计数器列,但随着数据的更新,在更新计数之前,我必须检查列是否已经存在。人口普查不会是一个高频率的任务,只是偶尔使用。。。但我想我会避免使用CountQuery。因此,虽然不太理想,但IMHO,计数器列确实是更好的计数方式。我考虑使用计数器列进行跟踪,但随着数据的更新,在更新计数之前,我必须检查列是否已经存在。人口普查不会是一个高频率的任务,只是偶尔使用。。。但是我想我会避免使用CountQuery。所以,虽然不是很理想,但是counter列确实是更好的计数方式。