大数据集上cassandra超时中的计数查询

大数据集上cassandra超时中的计数查询,cassandra,Cassandra,这是我的桌子 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

这是我的桌子

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)
我正在尝试从star\U事件中选择计数(1)。我知道这是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
值,但仍然不走运。有哪些变通办法。

我看你对卡桑德拉很了解;)您已经尝试更改yaml文件。在这个问题上,你真的没有什么可以做的,因为它现在是这样,并且只使用cassandra(除了可能进一步增加超时时间,看看会发生什么)

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

  • 通过外部进程执行计数——spark对我来说总是非常好,但我也编写了一些自己的工具来经常处理数据。您可以将此答案用于自己的计数工具

  • 尝试重新建模数据-但我想这对您没有好处,因为将表拆分为多个较小的表似乎并不理想

  • 如果您只是对球场感兴趣,请使用fuzzy cassandra近似值(在128以内),方法是使用表统计数据
    nodetool cfstats

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


  • 这要看情况而定,如果这个计数是你不经常做的,可以等待自己的脚本或spark就可以了。如果你必须马上进行计数,我会选择计数器列。

    好的点非常有用。所以如果spark可以替代这个问题。我不清楚这一点,如果cassandra本身无法处理这样的查询,那么spark将是?spark实际上会将行分成更小的块并进行计数:)我知道这听起来可能有点奇怪,我同意,但如果数据量很大,这在单次请求中就不能很好地执行,所以是的,您还需要一些额外的东西。分布式计数总是有点问题。有趣的是,我一定会试试这个,然后再给你回复。谢谢你告诉我方向:)