我在cassandra中遇到了范围选择的问题:有时候它不会返回所有数据。 它是一个2.1.0集群。 Apache提供的二进制文件。
这是我的表:
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 repair 并不能解决问题。
我没有在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 + ? WHERE gran = ? AND dt = ? AND ctx = ? AND eid = ? AND io = ?
正常选择的跟踪: trace1.log 跟踪不正确的范围选择: trace2.log
答案 0 :(得分:0)
不知道为什么但是在将群集升级到cassandra 2.1.8之后问题得到解决。