【问题标题】:Counting columns, very slow CountQuery vs SliceQuery operations计数列,非常慢的 CountQuery 与 SliceQuery 操作
【发布时间】:2011-11-16 09:31:56
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: cassandra hector pelops


    【解决方案1】:

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

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

    【讨论】:

    • 我认为要跟踪计数器列,但是随着数据的更新,在更新计数之前,我必须检查列是否已经存在。人口普查不会是一项高频任务,只是偶尔使用......但我想我会避免使用 CountQuery。
    • 所以,虽然不理想,恕我直言,计数器列确实是更好的计数方式。
    猜你喜欢
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    相关资源
    最近更新 更多