1

我编写了一个“人口普查”程序来遍历列族中的所有行,并在每一行中计算列,记录最大值和行键。我在 Hector 客户端上花费了更多时间,但也编写了一个 Pelops 客户端进行测试。

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

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

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

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

4

1 回答 1

1

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

更一般地说,使用计数器列保持非规范化计数可能比完整的 CF 扫描更好:http ://www.datastax.com/dev/blog/whats-new-in-cassandra-0-8-part-2-计数器

于 2011-09-14T14:21:03.170 回答