cassandra - Cassandra 告密者:阅读程序
问题描述
我目前正在阅读《Cassandra,权威指南》一书,其中有一段我不太明白:
当 Cassandra 执行读取时,它必须联系由一致性级别确定的多个副本。为了支持最大读取速度,Cassandra 选择单个副本来查询完整对象,并要求其他副本提供哈希值,以确保返回所请求数据的最新版本。告密者的作用是帮助识别将返回最快的副本,这是查询完整数据的副本。
很抱歉问了几个分组问题,但由于它们与同一段文本有关,我想将它们一起问是有意义的。
那么,一致性级别是什么意思呢?
据我了解,选择了 1 个副本(= 分区?)(如何?)来获取数据。
然后,使用 1 个副本检查此分区是否包含最新数据。但是如果你有多个副本,那么如何确定这个特定的副本可以用来检查最新的数据呢?
它到底是如何工作的,如何确定它不是包含最新数据的另一个副本?
例如,r1 和 r2 包含相同的数据。R3 包含最新数据。例如选择 R1,对照 r2 检查。
有什么见解吗?
解决方案
此外,本书进一步解释了第一个副本是如何确定的:
第一个副本将始终是声明令牌所在范围的节点,但其余副本将根据复制策略(有时也称为副本放置策略)放置。
除了和这本书的功劳,他们后来也很好地解释了它:
对于读取查询,一致性级别指定在返回数据之前必须响应读取请求的副本节点数。对于写入操作,一致性级别指定必须响应多少副本节点才能将写入报告为成功报告给客户端。因为 Cassandra 最终是一致的,所以对其他副本节点的更新可能会在后台继续进行。
可用的一致性级别包括 ONE、TWO 和 THREE,每个级别都指定必须响应请求的副本节点的绝对数量。QUORUM 一致性级别需要来自大多数副本节点的响应(有时表示为“复制因子 / 2 + 1”)。ALL 一致性级别需要所有副本的响应。我们将在第 9 章中更详细地研究这些一致性级别和其他内容。
对于读取和写入,ANY、ONE、TWO 和 THREE 的一致性级别被认为是弱的,而 QUORUM 和 ALL 被认为是强的。Cassandra 中的一致性是可调整的,因为客户端可以在读取和写入时指定所需的一致性级别。在 Cassandra 中,有一个公式被普遍用来表示实现强一致性的方式:R + W > N = 强一致性。在这个等式中,R、W 和 N 分别是读取副本计数、写入副本计数和复制因子;在这种情况下,所有客户端读取都会看到最近的写入,并且您将具有强一致性。
推荐阅读
- sql - 选择最便宜的价格,然后按供应商分组?
- typescript - 如何引用属性的类型?
- asp.net-mvc - 无法安装组件:未定义模板或渲染函数。“vue.js”与 asp.net mvc
- c++ - 带有 u8、char8_t 和 std::string 的 C++20
- c# - 客户端已断开连接,因为基础请求已完成。不再有 HttpContext 可用
- android - 支持较低操作系统版本的 VectorDrawables
- python-3.x - python-sounddevice 不会检测音频接口上的所有输入通道(windows)
- azure - Azure Cache Redis Large total connections received 状态
- javascript - 在打开侧抽屉窗口时跳到 html css 中的高度为零
- python - 对具有相同后缀的字符串列表进行分组