【问题标题】:Query all and consistency查询全部和一致性
【发布时间】:2017-09-04 13:07:46
【问题描述】:

这是一个关于 cassandra 在 select * 查询中的行为的问题。 更多的是为了理解,我知道通常我不应该执行这样的查询。

假设我有 4 个节点,RF=2。 下表(列族): 创建表 test_storage ( 标识文字, created_on TIMESTAMP, 位置int, 数据文本, 主键(id) ); 我在表中插入了 100 个条目。

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

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

【问题讨论】:

    标签: cassandra nodes nosql


    【解决方案1】:

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

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

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

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

    并执行 select * from test_storage where location=1 之类的查询,我还得到了具有一致性的随机结果

    与上述相同的答案,原生 Cassandra 二级索引只是在后台使用 Cassandra 表来存储反向索引,因此相同的最终一致性规则也适用于那里

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 2018-12-22
      • 2019-01-07
      • 1970-01-01
      相关资源
      最近更新 更多