代码之家  ›  专栏  ›  技术社区  ›  Trace

Cassandra Snitches:读取过程

  •  0
  • Trace  · 技术社区  · 6 年前

    我现在正在读一本书《卡桑德拉,权威指南》,有一段我不太明白:

    当Cassandra执行读取时,它必须联系多个副本 由一致性级别决定。为了支持最大 读取速度,cassandra选择一个副本来查询 完整对象,并请求其他副本以获取哈希值,以便 确保返回所请求数据的最新版本。角色 “告密者”的作用是帮助识别将返回 最快,这是查询完整数据的副本。

    很抱歉问了几个分组的问题,但由于它们与同一段课文有关,我想把它们一起问是有意义的。

    那么,一致性水平是什么意思?
    据我所知,1个副本(=分区?)被选中(如何?)去获取数据。
    然后,使用1个副本检查此分区是否包含最新数据。但是,如果您有多个副本,那么如何确定此特定副本可用于检查最新数据?
    它是如何工作的,如何确定它不是包含最新数据的另一个副本?

    例如,r1和r2包含相同的数据。r3包含最新数据。例如,选择r1,对照r2进行检查。
    有什么见解吗?

    2 回复  |  直到 6 年前
        1
  •  0
  •   Alex Ott    6 年前

    卡桑德拉可调 consistency -您可以为操作指定一致性级别-for writes 这是在将写入确认返回给客户机之前应获得的写入确认数,对于 reads -应联系多少个副本以获取应返回给客户端的数据。通常,较小的一致性级别会导致更好的性能(您不必等待其他节点),但可能会导致数据丢失(如果服务器在写入后立即停机),或者返回过时的数据(如果副本不同步)。

    例如,您有复制因子3—在本例中,您将有3个数据副本(副本)。如果使用一致性级别仲裁读取,则需要从2个节点获取数据。在这种情况下,处理读取(协调器)的节点将所有数据的请求发送到一个节点,并将请求摘要发送到另一个节点。摘要用于与要查找的实际数据进行比较(如果副本之间的数据存在差异)。

    我建议你读一下 DSE Architecture guide 要了解一致性级别、读/写路径以及Cassandra的总体工作方式。

    说到告密,这是引自 documentation :

    告密者确定哪些数据中心和机架节点属于。snitches将网络拓扑信息告知数据库,以便有效地路由请求。

    基于副本位置的信息,cassandra正在决定应该联系哪些节点来完成请求—例如,如果请求具有一致性,则不要从另一个数据中心读取数据 LOCAL_... ,还有很多其他的东西。

        2
  •  0
  •   Trace    6 年前

    此外,本书还进一步解释了如何确定第一个副本:

    第一个副本将始终是声明 令牌将丢失,但其余的副本将被放置 根据复制策略(有时也称为 副本放置策略)。

    除了这本书之外,他们还很好地解释了:

    对于读取查询,一致性级别指定复制副本的数量 节点必须在返回数据之前响应读取请求。为了 写操作,一致性级别指定复制副本的数量 节点必须响应,才能将写入报告为成功 客户端。因为卡桑德拉最终是一致的 副本节点可以在后台继续。

    可用的一致性级别包括1、2和3,每个 它指定必须响应的副本节点的绝对数量 请求。仲裁一致性级别需要来自 大多数副本节点(有时表示为“复制 系数/2+1)。所有一致性级别需要来自 所有的复制品。我们将检查这些一致性级别和其他 更详细的内容见第9章。

    对于读写操作,任何一个、一个、两个, 其中三个被认为是弱势群体,而法定人数和所有人都被认为是弱势群体 坚强的。一致性在cassandra中是可调的,因为客户可以 指定所需的读写一致性级别。那里 是一个普遍用来表示实现 卡桑德拉的强一致性:r+w>n=强一致性。在 这个公式,r,w,n是读副本计数,写 分别是副本计数和复制fac'tor;all client 在这个场景中,reads将看到最新的write,您将 有很强的一致性。