我目前正在阅读这本书" Cassandra,权威指南"并且有一段我不太了解:
当Cassandra执行读取操作时,它必须联系许多副本 由一致性水平决定。为了支持最大化 读取速度,Cassandra选择一个副本来查询 完整对象,并为哈希值请求其他副本 确保返回所请求数据的最新版本。角色 小报的目的是帮助识别将返回的副本 最快,这是查询完整数据的副本。
很抱歉问一些分组问题,但由于它们与同一段文字相关,我想将它们放在一起是有意义的。
那么,一致性水平是什么意思?
据我所知,选择1个副本(=分区?)(如何?)来获取数据
然后,使用1个副本来检查此分区是否包含最新数据。但是如果你有例如多个副本,那么如何确定该特定副本可用于检查最新数据?
它是如何工作的,如何确定它不是包含最新数据的另一个副本?
例如,r1和r2包含相同的数据。 R3包含最新数据。例如,选择R1,针对r2检查 任何见解?
答案 0 :(得分:0)
Cassandra具有可调参数consistency - 您可以为操作指定一致性级别 - 对于writes,这是在将写入确认返回给客户端之前应获取多少次写入确认,以及reads - 应联系多少副本以获取应返回给客户的数据。通常,较小的一致性级别会带来更好的性能(您不会等待其他节点),但可能会导致数据丢失(如果服务器在写入后立即关闭),或者导致返回过时数据(如果副本不在同步)。
例如,您有复制因子3 - 在这种情况下,您将拥有3份数据副本(副本)。如果您使用一致性级别QUORUM读取,那么您需要从2个节点获取数据。在这种情况下,处理读取(协调器)的节点将对所有数据的请求发送到一个节点,并将摘要请求发送到另一个节点。如果副本之间存在数据差异,摘要用于与实际数据进行比较。
我建议您阅读DSE Architecture guide以了解一致性级别,读/写路径和&整体来说Cassandra是如何运作的。
谈论小偷,这里引用documentation:
一个小报确定哪些数据中心和机架节点属于哪个。 Snitch通知数据库有关网络拓扑的信息,以便有效地路由请求。
根据有关副本位置的信息,Cassandra正在决定应该联系哪些节点来完成请求 - 例如,如果请求具有一致性LOCAL_...
,请不要从其他数据中心读取数据,以及许多其他的东西。
答案 1 :(得分:0)
此外,本书进一步解释了如何确定第一个副本:
第一个副本将始终是声明范围的节点 令牌落入哪个,但复制品的其余部分被放置 根据复制策略(有时也称为 副本放置策略)。
除此之外,他们还对这本书有所了解:
对于读取查询,一致性级别指定了多少副本 节点必须在返回数据之前响应读取请求。对于 写操作,一致性级别指定了多少副本 节点必须响应写入成功的写入 客户。因为Cassandra最终是一致的,更新到其他 副本节点可以在后台继续。
可用的一致性级别包括ONE,TWO和THREE 它指定必须响应的副本节点的绝对数量 一个要求。 QUORUM一致性级别需要来自a的响应 大多数副本节点(有时表示为“复制” factor / 2 + 1“)。 ALL一致性级别需要响应 所有的复制品。我们将检查这些一致性级别和其他级别 在第9章中有更详细的说明。
对于读取和写入,ANY,ONE,TWO的一致性级别, 被认为是弱的,而考虑了QUORUM和ALL 强大。 Cassandra的一致性是可调的,因为客户可以 在读取和写入时指定所需的一致性级别。那里 是一个通常用于表示实现方式的方程式 Cassandra的强一致性:R + W> N =强一致性。在 这个等式,R,W和N是读取副本计数,即写入 副本计数和复制因子;所有客户 读取将在此场景中看到最近的写入,您将会看到 具有很强的一致性。