gpt4 book ai didi

nosql - Cassandra = ReadRepair 会阻止缩放读取吗?

转载 作者:行者123 更新时间:2023-12-01 13:01:24 25 4
gpt4 key购买 nike

Cassandra 必须选择启用“ReadRepair”。读取被发送到所有副本,如果一个是陈旧的,它将被修复/更新。但由于所有副本都接收到读取,因此当节点达到 IO-Saturation 时,就会有一个点。由于所有副本节点总是接收读取,添加更多节点将无济于事,因为它们也接收所有读取(并且会立即饱和)?

或者 cassandra 是否提供了一些“可调性”来配置 ReadRepair 只去不是所有的节点(或提供任何其他允许真正读取缩放的“复制”)?

谢谢!!延斯

更新:一个具体的例子,因为我仍然不明白它在实践中是如何工作的。

  • 9 Cassandra“盒子/服务器”
  • 3 个副本 (N=3) => 每个“行”是写入 2 个附加节点 = 3盒子总计保存数据)
  • 启用读取修复
  • 有问题的行(比方说 customer1)的访问量很大

1.) 我第一次将“Customer1”行写入 Cassandra 时,它将最终在所有 3 个节点上可用。

2.) 现在我用每秒 1000 次请求请求 Customer1 来查询系统(并在禁用任何缓存的情况下使其更加清晰)。

3.) 读取将始终被分派(dispatch)到所有 3 个节点。 (第一个请求(到最近的节点)将是对数据的完整请求,另外两个请求将只是一个“校验和请求”。)

4.) 当我们查询 1000 次请求时,我们达到了所有副本的 IO 限制! (所有 3 个节点上的 IO 都相同!!(只有带宽在校验和节点上小得多)。

5.) 我再添加 3 个 Box(所以我们总共有 12 个 Box):

A)这些盒子还没有数据(以帮助线性扩展)。我首先必须将 Customer1 Record 获取到至少一个新 Box 中。=>这意味着我必须将复制因子更改为 4(或者是否有任何其他选项可以将数据传输到另一个盒子?)

现在我们遇到了同样的问题。 Replication Factor 现在是 4。所有 4 个 Box 都将收到这个高流量 customer1 行的 Read(Repair)Requst。这不会以这种方式扩展。只有当我们有不会收到 ReadRepair 请求的 Copy 时,缩放才会起作用。

我的理解有什么问题??我的结论:使用标准的 ReadRepair,系统将不会线性扩展(对于单个高流量行),因为添加更多框也会导致这些框也收到 ReadRepair 请求(对于这个流量行)......

非常感谢!!!延斯

最佳答案

添加更多节点会有所帮助(在大多数情况下)。在读取期间只会有 N 个读取修复“请求”,其中 N 是 ReplicationFactor(副本数,nb。不是整个集群中的节点数)。因此,如果您请求的数据包含在节点键范围内(或持有数据的副本),则新节点将仅包含在读取/读取修复中。

还有每个 ColumnFamily 的 read_repair_chance 可调参数,但这是一个更高级的主题,不会改变您应该通过添加更多节点而不是取消调整读取修复来扩展读取的基本等式。

您可以从 bens slides 了解更多关于复制和一致性的信息

关于nosql - Cassandra = ReadRepair 会阻止缩放读取吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5780016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com