【问题标题】:What is the cardinality of a partition key?分区键的基数是多少?
【发布时间】:2017-04-11 06:14:53
【问题描述】:

如果我使用随机生成的唯一 ID ,是否正确 基数会很大?

如果我有一个低基数的键,例如分区键可以采用的 5 个类别值,并且我想分发它,推荐的方法似乎是将分区键设为复合键。

但这要求我必须在查询中指定复合键的所有部分才能检索该键的所有记录。

即使这样,生成的令牌也可能最终用于同一个节点。

有什么方法可以决定复合键的附加列,以保证数据会被分发?

【问题讨论】:

    标签: cassandra partitioning


    【解决方案1】:

    问题在于,对于 cassandra,您实际上希望拥有“已知”的分区键,以便您可以在需要时访问数据。当您在分区键上说大基数时,我不确定您的意思。你会在集群中得到很多分区。这通常没问题。

    如果您想在集群周围分布数据。您可以使用人工列。这种方法有时也称为分桶。基本上,如果您想保留 100k+ 或从不使用 100+ 列,那没关系。将此数据拆分为分区。

    有些人只是使用一个技巧,当他们插入数据时,他们会在分区中添加一些人工存储桶列……比如说随机(1-10),然后当他们读取数据时,他们只需发出 10 个查询或使用一个 in 运算符,然后获取数据并在客户端合并它。这种方法有很多好处,因为它可以防止集群中出现“热行”。

    每个键都有 1/NUM_NODES 或多或少的机会在同一个节点上结束。所以我会说大多数时候这不是你应该担心太多的事情。除非您的分区数小于集群中的节点数。

    基本上,对于附加列随机(已经描述)或基于某些输入数据的某些函数有两种选择,即当使用时间序列数据并且您决定根据月份进行存储时,您始终可以根据以下数据计算月份您将要插入,然后将其放入桶中。当您检索数据时,您就会知道……好的。我正在寻找 2016 年 5 月的东西,然后您就知道如何选择合适的存储桶了。

    【讨论】:

      猜你喜欢
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      • 2015-05-05
      • 2020-03-07
      • 2019-06-24
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多