Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nosql Cassandra=读修复是否阻止缩放读取?_Nosql_Cassandra - Fatal编程技术网

Nosql Cassandra=读修复是否阻止缩放读取?

Nosql Cassandra=读修复是否阻止缩放读取?,nosql,cassandra,Nosql,Cassandra,Cassandra必须选择启用“ReadRepair”。读取将发送到所有副本,如果其中一个副本已过时,则将对其进行修复/更新。但是,由于所有副本都接收到读取,因此当节点达到IO饱和时,会有一个点。由于所有副本节点都会接收到读取,因此添加更多节点不会有帮助,因为它们也会接收所有读取(并且会立即饱和) 或者cassandra是否提供了一些“可调性”来配置ReadRepair仅适用于并非所有节点(或者提供任何其他允许真正读取扩展的“复制”) 谢谢!! 延斯 更新: 一个具体的exmaple,因为我仍然

Cassandra必须选择启用“ReadRepair”。读取将发送到所有副本,如果其中一个副本已过时,则将对其进行修复/更新。但是,由于所有副本都接收到读取,因此当节点达到IO饱和时,会有一个点。由于所有副本节点都会接收到读取,因此添加更多节点不会有帮助,因为它们也会接收所有读取(并且会立即饱和)

或者cassandra是否提供了一些“可调性”来配置ReadRepair仅适用于并非所有节点(或者提供任何其他允许真正读取扩展的“复制”)

谢谢!! 延斯

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

  • 9卡桑德拉“盒子/服务器”
  • 3个副本(N=3)=>每个“行”都是 写入2个附加节点=3 框中包含数据总数)
  • 已启用读取修复
  • 所讨论的这一行(假设customer1)流量很大
1.)当我第一次将行“Customer1”写入Cassandra时,它实际上在所有3个节点上都可用

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

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

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

5.)我增加了3个盒子(因此我们总共有12个盒子):

A) 这些框还没有数据(有助于线性扩展)。首先,我必须将Customer1记录发送到至少一个新框中。 =>这意味着我必须将复制系数更改为4 (或者是否有其他选项将数据传送到另一个框?)

现在我们也有同样的问题。复制因子现在是4。所有4个框都将收到此高流量customer1行的读取(修复)请求。这不是以这种方式扩展的。只有当我们的副本不会收到ReadRepair请求时,缩放才会起作用

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


非常感谢!!!Jens

添加更多节点将有所帮助(在大多数情况下)。在读取过程中,只会有N个读取修复“请求”,其中N是复制因子(副本的数量,注意,不是整个集群中节点的数量)。因此,仅当您请求的数据包含在节点密钥范围内(或包含数据的副本)时,新节点才会包含在读/读修复中

还有“读修复”选项,可按列族进行调整,但这是一个更高级的主题,并且不会改变一个基本公式,即您应该通过添加更多节点来扩展读取,而不是取消调整读修复


您可以从Hello Schildmeijer中了解有关复制和一致性的更多信息。非常感谢你的帮助!!我完全理解,“阅读修复机会”可能是一种扩展选择。但我仍然不明白,如果没有这个设置,如何通过简单地添加一个节点来扩展。我用一个具体的例子更新了我的问题。如果你能对此发表评论,那将是非常感谢的。如果我的想法正确与否,我的理解有什么问题。非常感谢你!!关键是您应该在“引导”模式下添加节点,而不增加射频。(Bootstrap=现有节点分配数据并将数据发送到新节点。)请参阅Hello Jonathan,谢谢您的帮助!!(顺便说一句,我知道你的博客来自seraching for cassandra,内容非常好)。好。。。我还是不明白。(也许这是我的错,但我读了整个复活节关于卡桑德拉的书,也许这是因为缺少关于基础知识的好文档)。我知道自举。引导将导致新节点接收数据(它将从最大的安装中分割keyrange并声明一半的密钥)。但是该节点如何在不增加RF的情况下保持“最新”?Bootsrapping只会导致拥有数据,但它必须保持最新状态,Thank或者说:我的理解是(通过大量阅读),添加一个新节点将导致一个事实,即给定数量的密钥将分布在更多节点上。因此,每个节点将负责一个较小的子集。但是为了增加集群中单个(!)键的可伸缩性,仅添加“副本”将有助于扩展。因此我必须增加射频。也许这个假设是错误的,但这并没有记录或解释。。。我会接受答案,虽然我完全不明白…谢谢