Cassandra:范围选择结果不正确

时间:2015-06-08 15:50:20

标签: cassandra

我在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

1 个答案:

答案 0 :(得分:0)

不知道为什么但是在将群集升级到cassandra 2.1.8之后问题得到解决。