我在cassandra中有下表:
create table IF NOT EXISTS sample_table(
col1 int,
col2 int,
col3 int,
primary key(col1,col2)
);
上表当前有640行。 以下查询以查找令牌:
select system.token(col1),col1,col2,col3 from sample_table;
执行后,通知所有行都位于-9157060164899361011至9162265122815852158令牌之间。
现在,这显然意味着没有-9223372036854775808令牌的记录。
但是,当我在下面的查询中执行
select system.token(col1),col1,col2,col3 from sample_table
where token(col1)=-9223372036854775808;
即使没有返回的令牌都为-9223372036854775808,它却给出了全部640行作为答案。
对-9223372036854775807令牌执行相同的查询时,完全不返回任何正确的记录。
我发现,这种怪异的行为仅适用于-9223372036854775808令牌。
我正在使用murmur3partitioner。
如果有人知道其背后的原因,请解释。
答案 0 :(得分:1)
从Cassandra文档中看来,最小令牌值(minimum long value in Java)用来表示环中的所有令牌。
来自Cassandra的Java驱动程序的官方JavaDoc:
范围是从开始到结束,从结束到结束。当开始和结束是相同的令牌时,该字段为空,除非这是最小令牌,在这种情况下,范围覆盖整个环(这与CQL范围查询的行为一致)。