【问题标题】:Understanding the relationship between primary key and partitioning in Cassandra理解 Cassandra 中主键和分区之间的关系
【发布时间】:2020-09-20 17:39:35
【问题描述】:

我是 Cassandra 的新手,在主键方面有几个新手级别的问题。

  1. 每条记录的主键是否应该是唯一的? (我的猜测不会。) 详细说明。假设我的桌子是这样的
    CREATE TABLE user_action (
    user_id int,
    action text,
    date_of_action date,
    PRIMARY KEY (user_id)
    )

我猜我可以有多个具有相同 user_id 的行

  1. 如果主键不是每条记录一个,一个主键可以拆分到多个分区吗?

  2. 一个分区可以有多个主键吗?

  3. 是主键自己决定选择分区还是主键的hashCode用来选择分区?

  4. 将分区视为文件是否公平?

【问题讨论】:

    标签: cassandra cassandra-3.0


    【解决方案1】:

    在某些情况下,主键和分区键会相同,但并非总是如此,这取决于主键的数量。数据基于分区键分布,分区键在 Cassandra 集群中是唯一的。我没有在这里解释所有场景和概念,但是是的,您应该阅读文档,我相信您在阅读以下链接后可以很快理解这些内容。

    https://www.datastax.com/blog/2016/02/most-important-thing-know-cassandra-data-modeling-primary-key

    https://docs.datastax.com/en/dse/5.1/cql/cql/cql_using/useCompoundPrimaryKeyConcept.html

    【讨论】:

      【解决方案2】:

      1>每条记录的主键是否应该是唯一的? (我的猜测是 不是。)详细说明。假设我的桌子是这样的

       CREATE TABLE user_action ( user_id int, action text, date_of_action
       date, PRIMARY KEY (user_id) )
      

      每个记录/行的主键应该是唯一的。在您提到的示例中,您只能有一条 user_id 记录。为了允许具有相同 user_id 的多行,您必须引入一个区分键。这个键在 Cassandra 中称为集群键,它是主键的一部分。

      主键是(分区键和集群键)的组合。 Cassandra 使用分区键来查找分区/记录。如果在数据模型中定义了聚类键,那么它将用于区分不同的行。如果没有像您的情况那样定义聚类键,那么数据库中只会保留一条记录。

      在下面的示例中,您可以拥有不同状态的相同 user_id 记录。这里的主键是 (user_id, state) 的组合。 user_id 是分区键,状态是集群键。

      CREATE TABLE user_action (
      user_id int,
      state text, 
      action text,
      date_of_action date,
      PRIMARY KEY (user_id,state)
      )
      

      我猜我可以有多个具有相同 user_id 的行

      如上所述,如果您定义了集群键,则可以有多个具有相同 user_id 的行,否则对于您引用的示例,这是不可能的。

      2>如果主键不是每条记录一个,是否可以拆分主键 跨多个分区?

      主键不能跨多个分区拆分。如上所述,主键的分区键部分将始终指向唯一分区。

      3>一个分区可以有多个主键吗?

      在我引用的示例中,(1,RJ), (1,GJ) 可能是指向由分区键值 1 指向的单个分区的主键。因此,从这个意义上说,您可以为一个分区拥有多个主键.

      4>是主键本身决定选择分区还是 用于选择分区的主键的 hashCode?​​p>

      分区键的哈希码(主键的一部分)用于获取分区

      5>将分区视为文件是否公平?

      这取决于您的数据模型。

      【讨论】:

        猜你喜欢
        • 2018-03-27
        • 2014-09-16
        • 2017-05-22
        • 1970-01-01
        • 2019-07-24
        • 1970-01-01
        • 2012-10-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多