查询所有内容和一致性

时间:2016-05-09 08:53:29

标签: cassandra nodes nosql

这是关于select *查询的cassandra行为的问题。 这更像是为了理解,我知道我不应该执行这样的查询。

假设我有4个节点,RF = 2。 下表(列族): create table test_storage(     id文本,     created_on TIMESTAMP,     location int,     数据文本,     PRIMARY KEY(id) ); 我在表格中插入了100个条目。

现在我通过cqlsh从test_storage中选择*。多次执行查询我得到不同的结果,所以不是所有条目。将一致性更改为local_quorum时,我总是返回完整的结果。为什么会这样? 我假设,尽管从性能上看,我还得到所有条目的一致性,因为它必须查询整个令牌范围。

第二个问题,当我在这种情况下将二级索引添加到位置,并执行查询,例如select * from test_storage where location = 1时,我也会得到一致性随机结果。并且在更改为一致性级别local_quorum时始终更正结果。在这里,我不明白为什么会这样?

1 个答案:

答案 0 :(得分:1)

  

当改变local_quorum的一致性时,我总是得到完整的结果。为什么会这样?

欢迎来到最终的一致性世界。要理解它,请阅读我的幻灯片:http://www.slideshare.net/doanduyhai/cassandra-introduction-2016-60292046/31

  

我假设,尽管从性能上看,我还得到所有条目的一致性,因为它必须查询整个令牌范围

是的,Cassandra将查询所有令牌范围,因为非限制SELECT *但它只会从2个中的一个副本请求数据(RF = 2)

  

并执行一个查询,例如select * from test_storage where location = 1我也得到随机结果与一致性

与上面相同的答案,本地Cassandra二级索引只是使用引擎盖下的Cassandra表来存储反向索引,因此同样适用于最终一致性规则