我对 cassandra 中的范围选择有疑问:它有时不会返回所有数据。 它是一个 2.1.0 集群。可从 Apache 获得二进制文件。
这是我的 table :
CREATE TABLE metrics.main_cnt (
gran ascii,
ctx ascii,
io ascii,
eid uuid,
dt bigint,
apdex_s counter,
apdex_t counter,
"count" counter,
error counter,
time counter,
PRIMARY KEY ((gran, ctx, io, eid), dt))
我在该表中有很多行,如果我执行此查询:
SELECT * from main_cnt WHERE gran = 'min' AND ctx ='A' AND io = 'i' AND eid =4379eec6-ba09-4f70-8862-1c864595c371 and dt in (1420644000000, 1420640400000);
我得到了那个结果:
gran | ctx | io | eid | dt | apdex_s | apdex_t | count | error | time
------+-----+----+--------------------------------------+---------------+---------+---------+-------+-------+--------
min | A | i | 4379eec6-ba09-4f70-8862-1c864595c371 | 1420640400000 | 671 | 4 | 677 | 0 | 168253
min | A | i | 4379eec6-ba09-4f70-8862-1c864595c371 | 1420644000000 | 554 | 10 | 566 | 0 | 192666
但是如果我像这样使用范围选择:
SELECT * from main_cnt WHERE gran = 'min' AND ctx ='A' AND io = 'i' AND eid =4379eec6-ba09-4f70-8862-1c864595c371 and dt >= 1420640400000 and dt <= 1420644000000;
我只得到一行:
gran | ctx | io | eid | dt | apdex_s | apdex_t | count | error | time
------+-----+----+--------------------------------------+---------------+---------+---------+-------+-------+--------
min | A | i | 4379eec6-ba09-4f70-8862-1c864595c371 | 1420640400000 | 671 | 4 | 677 | 0 | 168253
我也尝试增加范围但没有更好的结果。 这不是唯一的情况,但如果我更改 dt 参数,我有时会得到多行的正确结果。
nodetool 修复 无法解决问题。
我没有在 Jira 中找到任何关于此类问题的工单。 有谁知道这个问题? 感谢您的帮助。
编辑:更多信息:
复制因子 = 3
集群大部分时间有 8 或 9 个节点
增量使用 java 驱动程序 2.1.5 完成,并使用此命令准备语句:UPDATE main_cnt SET time = time + ?,\"count\"=\"count\"+ ?, error = error + ?, apdex_s = apdex_s + ?, apdex_t = apdex_t + ?在哪里格兰=?和 dt = ?和 ctx = ?和开斋节=?和 io = ?
正常选择的跟踪: trace1.log 跟踪不正确的范围选择: trace2.log
最佳答案
不知道为什么,但在将集群升级到 cassandra 2.1.8 后问题得到解决。
关于Cassandra:范围选择结果不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30713744/