【问题标题】:Even Data distribution in CassandraCassandra 中的均匀数据分布
【发布时间】:2020-04-14 23:50:42
【问题描述】:

我是 Cassandra 的新手,我被困在某一点上。

假设我有一个 RF=1 的 5 节点集群(为简单起见)

Token Ranges 
==============
N1 : 1-100
N2 : 101-200
N3 : 201-300
N4 : 301-400
N5 : 401-500

我有一个包含 10 个分区键的键空间:

ID (PartitionKey) | Name
------------------------
1                 Joe
2                 Sarah
3                 Eric
4                 Lisa
5                 Kate
6                 Agnus
7                 Lily
8                 Angela
9                 Rodger
10                Chris

10 个分区键 ==> 意味着 ==> 10 个哈希值

partitionkey ==> token generated
=================================
1                 289 (goes on N3)
2                 56 (goes on N1)
3                 78 (goes on N1)
4                 499 (goes on N5)
5                 376 (goes on N4)
6                 276 (goes on N3)
7                 2 (goes on N1)
8                 34 (goes on N1)
9                 190 (goes on N2)
10                68 (goes on N1)

如果是这样的话,那么:

N1 has the partition keys : 2,3,7,8,10
N2 has the partition keys : 9
N3 has the partition keys : 1,6
N4 has the partition keys : 5
N5 has the partition keys : 4

所以我们看到 N1 与其他节点相比已加载(根据我的理解)。

请帮助我了解数据在 Cassandra 中是如何均匀分布的,w.r.t 分区器和一致性哈希。

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    您在此处发布的内容有些道理,主要是因为通过散列的数据分布对于较小的数字来说是困难的。但是让我们添加一个假设...假设我们使用 vNodes,num_tokens: 4* 在cassandra.yaml 中设置。

    因此,有了这个新假设,令牌范围分布可能看起来更像这样:

      Token Ranges
      ==============
      N1 :    1-25, 126-150, 251-275, 376-400
      N2 :   26-50, 151-175, 276-300, 401-425
      N3 :   51-75, 176-200, 301-325, 426-450
      N4 :  76-100, 201-225, 326-350, 451-475
      N5 : 101-125, 226-250, 351-375, 476-500
    

    鉴于此分布,您的密钥现在放置如下:

      N1 has the partition keys : 5, 7
      N2 has the partition keys : 1, 6, 8
      N3 has the partition keys : 2, 9, 10
      N4 has the partition keys : 3
      N5 has the partition keys : 4
    

    现在发现范围分配算法有一个随机组件,实际分布可能会更好。

    与所有数据集一样,随着数据量的增加,数字会变得更好。我相信您会看到 1000 个分区键与 10 个分区键相比更好。

    此外,随着数据集大小的增加,数据分布将受益于通过设置allocate_tokens_per_keyspace 添加的新节点。这将允许令牌分配算法根据您的键空间的复制因子对令牌范围分配做出明智的决策(不那么随机)。

    *注意:许多 Cassandra 专家认为将 vNodes 与 num_tokens: 4 一起使用是最佳生产设置。使用新算法,256 个令牌的默认值相当高。

    【讨论】:

      【解决方案2】:

      选择分区键对于在所有节点之间均匀分布数据非常重要。分区键应该是具有非常高基数的东西。

      例如,在一个 10 节点的集群中,选择特定国家的州作为分区键可能不是很理想,因为创建热点的可能性非常高,尤其是当记录数量本身可能跨州不均时。而选择诸如邮政编码之类的东西可能比客户名称或订单号之类的东西更好甚至更好。 如果对您的用例有帮助,您可以探索使用复合分区键。

      【讨论】:

        【解决方案3】:

        在 Cassandra 中,数据基于分区和散列算法进行分布。我们为数据分发和复制配置了许多其他参数,例如复制因子、复制策略、Snitch 等。以下是标准推荐文档。 https://docs.datastax.com/en/cassandra-oss/2.2/cassandra/architecture/archDataDistributeAbout.html

        【讨论】:

          猜你喜欢
          • 2011-07-16
          • 2013-08-05
          • 1970-01-01
          • 2011-12-05
          • 2018-02-06
          • 2019-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多