我编写了一个“人口普查”程序来迭代列族中的所有行,并在每行内计算列数,记录最大值和行键。我花了更多时间在Hector客户端上,但也写了一个Pelops客户端进行测试。
基本流程是使用RangeSlicesQuery迭代行,然后在每一行使用SliceQuery迭代并收集统计信息。在Pelops中工作类似,只是不同的API。下行必须手动进行缓冲,为行和列选择缓冲区大小...我当前的数据是1200万行,最大列数~25K,所以是的,需要一段时间...在我目前的配置中,我得到了>每秒25K行。
寻找改进和发现Hector的CountQuery的方法(我假设使用Thrift客户端get_count())。认为迭代密钥会更快(使用RangeSlicesQuery.setReturnKeysOnly()),然后在每个行键上重复使用CountQuery,我修改了代码。
它不仅速度慢,而且速度慢30倍! (每秒只处理900行)......
有没有更好的方法来计算列?
答案 0 :(得分:1)
不确定Hector会发生什么 - 我预计它会慢大约2倍,而不是慢30倍。
更一般地说,使用计数器列保持非规范化计数可能比完整的CF扫描更好:http://www.datastax.com/dev/blog/whats-new-in-cassandra-0-8-part-2-counters