当复制因子= =簇大小时,Cassandra分区如何工作?

pet*_*snd 6 replication partitioning distributed-system cassandra

背景:

我是Cassandra的新手,仍然试图围绕内部工作.

我正在考虑在一个只有少量节点(少于10个,最常见的是3个)的应用程序中使用Cassandra.理想情况下,我的集群中的每个节点都将拥有所有应用程序数据的完整副本.所以,我正在考虑将复制因子设置为簇大小.添加其他节点时,我会更改键空间以增加复制因子设置(nodetool修复以确保它获取必要的数据).

我将使用NetworkTopologyStrategy进行复制,以利用有关数据中心的知识.

在这种情况下,分区实际上如何工作?我已经读过在Cassandra中形成环的节点和分区键的组合.如果我的所有节点都对每个数据"负责"而不管分区器计算的哈希值,我是否只有一个分区键的环?

这种类型的Cassandra部署是否有巨大的挫折?我猜测会在后台进行大量异步复制,因为数据传播到每个节点,但这是设计目标之一,所以我很好.

读取的一致性级别通常可能是"一"或"local_one".

写入的一致性级别通常为"2".

要回答的实际问题:

  1. 复制因子==群集大小是一个常见的(甚至是合理的)部署策略,除了一个群集的明显情况之外?
  2. 我实际上是否有一个分区的环,其中分区程序生成的所有可能值都转到一个分区?
  3. 每个节点都被认为对每一行数据都"负责"吗?
  4. 如果我使用"一"的写一致性,Cassandra总是将数据写入客户端联系的节点吗?
  5. 我不知道这个战略还有其他垮台吗?

pha*_*act 5

我实际上是否有一个分区环,分区程序生成的所有可能值都进入一个分区?

每个节点是否被视为对每一行数据都是“负责任的”?

如果我的所有节点都对每个数据“负责”,而与分区程序计算出的哈希值无关,那么我是否只有一个分区键环?

不完全是,C *节点仍具有令牌范围,而c *仍将主副本分配给“负责”节点。但是所有节点还将具有RF = N(其中N是节点数)的副本。因此,本质上的含义与您所描述的相同。

这种Cassandra部署是否存在巨大的失败?我不知道该策略还有其他缺点吗?

我想不到,我想您可能会比平均值更容易受到不一致数据的影响,因此请使用C *的反熵机制来解决此问题(修复,读取修复,提示切换)。

一致性级别的法定人数或全部都会开始变得昂贵,但是我看到您不打算使用它们。

除了显而易见的集群群集情况之外,复制因子==群集大小是否是常见(甚至合理)的部署策略?

这并不常见,我想您正在寻找超高可用性,并且所有数据都可以放在一个盒子中。我认为我从未见过RF * 5的ac *部署。远距离RF = 3。

如果我使用写一致性“ 1”,Cassandra是否总是将数据写到客户机联系的节点上?

这取决于您在驱动程序上的负载平衡策略。通常,我们会选择令牌识别策略(假设您使用的是Datastax驱动程序之一),在这种情况下,请求会自动路由到主副本。您可以在自己的情况下使用轮询,并具有相同的效果。