【问题标题】:count query in cassandra timeout on large data set对大型数据集的 cassandra 超时计数查询
【发布时间】:2017-12-19 04:01:10
【问题描述】:

这是我的桌子

CREATE TABLE star.star_event (
 eventnumber int,
 primarytracks int,
 prodtime double,
 antinucleus int,
 eventfile int,
 eventtime double,
 histfile bigint,
 multiplicity int,
 nabovelb int,
 nbelowlb int,
 nlb int,
 pt double,
 runnumber int,
 vertexx double,
 vertexy double,
 vertexz double,
 PRIMARY KEY (eventnumber, primarytracks, prodtime)
) WITH CLUSTERING ORDER BY (primarytracks ASC, prodtime ASC)

我正在尝试做select count(1) from star_event。我知道这是 cassandra 支持的有效查询,至少对于少量数据。但是对于庞大的数据集,它似乎无法正常工作。

经常出错

ReadTimeout: Error from server: code=1200 [Coordinator node timed out
waiting for replica nodes' responses] message="Operation timed out -
received  only 0 responses." info={'received_responses': 0, 'required_responses': 1, 'consistency': 'ONE'}

cassandra.yaml 中增加了默认的ReadTimeout 值仍然没有运气。有哪些可用的解决方法。

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    我看到您已经足够了解 cassandra 了;) 而且您已经尝试过更改 yaml 文件。像现在这样仅使用 cassandra 并没有什么可以做的(除了可能进一步增加超时,看看会发生什么)

    基本上有时数据太大了。所以你必须解决这个问题。有几种方法可以做到这一点:

    1. 通过外部进程执行计数 - spark 对我来说总是很有效,但我也编写了一些自己的工具来经常处理数据。您可以将此答案用于您自己的计数工具https://stackoverflow.com/a/23750872/7413631

    2. 尝试重构数据 - 但我猜这对你没有好处,因为将表格分成多个较小的表格似乎不是最佳选择

    3. 如果您只是对棒球场感兴趣,请使用模糊 cassandra 近似值(128 以内),使用表格统计信息nodetool cfstatshttp://www.wentnet.com/blog/?p=24

    4. 尝试使用计数器列时,基本上每次插入都会再更新一次,这实际上会增加计数器值。但是,一旦开始计数,您还需要将其设置为某个初始值。

    这一切都取决于,如果这个计数是你不经常做的事情,可以等待自己的脚本或火花是好的。如果您必须立即拥有它,我会选择柜台列。

    【讨论】:

    • 好点很有帮助。所以如果火花可以替代这个问题。我不清楚这一点,如果 cassandra 本身无法处理此类查询,那么 spark 会是?
    • Spark 实际上会以较小的块将行拉出并计算它们:) 我知道这听起来有点奇怪我同意,但如果数据量很大,这在单个请求中表现不佳很大,所以是的,你还需要一些东西。分布式计数总是有点问题。
    • 很有趣,我一定会试试这个并回复你。谢谢你给我指路:)
    猜你喜欢
    • 2013-05-15
    • 2015-06-08
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多