首页 文章

查询所有和一致性

提问于
浏览
1

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

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

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

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

1 回答

  • 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表来存储反向索引,因此同样适用于最终一致性规则

相关问题