这是我的 table
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 了;)并且您已经尝试更改 yaml 文件。对于这个问题,您实际上无能为力,因为现在并且仅使用 cassandra(除了可能进一步增加超时并看看会发生什么)
基本上有时数据太大了。所以你必须解决这个问题。有几种方法可以做到这一点:
通过外部进程执行计数 - Spark 对我来说总是非常有效,但我也经常编写一些自己的工具来处理数据。您可以将此答案用于您自己的计数工具 https://stackoverflow.com/a/23750872/7413631
尝试重新建模数据 - 但我猜这对您没有好处,因为将表分成多个较小的表似乎不是最佳选择
如果您只是对使用表统计数据
nodetool cfstats
的大致情况感兴趣,请使用模糊 cassandra 近似(128 以内):http://www.wentnet.com/blog/?p=24尝试使用计数器列,基本上对您所做的每个插入进行一次更新,这实际上会增加计数器值。但一旦开始计数,您还需要将其设置为某个初始值。
这完全取决于,如果这个计数是你不经常做的事情,并且可以等待自己的脚本或 Spark 就可以了。如果您必须立即拥有它,我会选择计数器列。
关于cassandra - 计算大数据集上cassandra超时的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43423723/