【问题标题】:How does consistency level relate to Cassandra native secondary index?一致性级别与 Cassandra 原生二级索引有何关系?
【发布时间】:2021-08-19 11:51:15
【问题描述】:

一致性级别与二级索引有何关系?如果例如在没有限制的二级索引查询中使用 QUORUM 进行查询? Cassandra内部:先查询所有节点本地索引,然后用本地索引查询的结果(分区),使用QUORUM获取索引分区数据?

这就是为什么下面的陈述是正确的?:

问:“在使用二级索引时,一致性级别的选择如何影响集群可用性?”

A:“因为二级索引是分布式的,所以集群中的 ALL 令牌范围必须有可用的 CL 节点才能完成查询。例如,使用RF = 3,当环中连续三个节点中有两个不可用时,CL = QUORUM 的所有二级索引查询都会失败,但 CL = ONE 的二级索引查询会成功。无论集群大小如何,都是如此。”

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    您指定的一致性级别决定了读取请求必须有多少副本可用。

    在执行需要二级索引的查询时,这不仅适用于法定人数的节点,这次也适用于所有令牌范围的法定人数。

    例如一个有6个节点A到F的集群,如果节点A的token范围是50到100,并且节点B和C是环右边的相邻节点,那么对于一个读查询的一致性为@ 987654321@ 2 个节点 A/B/C 必须可用于令牌范围 50-100 的索引查找。对 DC/ring 中的所有其他令牌范围重复此要求。

    因此,二级索引查找非常昂贵,因此我们建议您避免使用它们,并在性能对您很重要的情况下尽可能进行非规范化。干杯!

    【讨论】:

    • 感谢埃里克。一个后续问题。执行秒时。索引查询,C*首先读取本地索引表,然后在个节点上进行索引查找。协调器是向集群中的所有节点发送初始索引查询还是仅发送 RF 数量的节点?
    • 索引查找是分散收集的,所有节点都被查询,因为协调器不知道数据存储在哪里。干杯!
    • 这也是我的理解,但是在使用 CQL TRACING ON 分析 sec.index 查询时,看起来并非所有节点都被查询,但我在阅读日志时可能遗漏了一些东西。似乎在测试仲裁索引查询时,例如3 节点集群,RF 3,仅查询 3 个节点中的 2 个。还是非常感谢!
    猜你喜欢
    • 2016-07-05
    • 1970-01-01
    • 2017-04-04
    • 2017-01-09
    • 2018-06-13
    • 1970-01-01
    • 2014-03-14
    • 2014-09-19
    • 2021-05-07
    相关资源
    最近更新 更多