【问题标题】:Cassandra: updrage and search partition keys are differentCassandra:升级和搜索分区键不同
【发布时间】:2020-10-05 03:37:45
【问题描述】:

我需要检索所有具有特定状态的申请

我考虑过创建一个包含两列的表:

Requisiton ID || Status

但是有一个问题:当我想更新状态时,我搜索requisiton id(因此这将是我的分区键)。但是当我查询时,我会搜索 status(以获取具有特定状态的所有申请),因此将最后一个作为我的分区键。

在这种情况下如何选择分区键?让 statusrequisition ID 都假设这个角色似乎不是很有效(因为每条记录都可能最终位于不同的节点中)。也许建议使用不同的数据库模型?

提前致谢!

【问题讨论】:

    标签: database-design cassandra data-modeling


    【解决方案1】:

    Partition Key 用于标识必须写入哪些节点数据/存在哪些节点数据。

    Clustering key 用于根据列对分区内的数据进行排序。

    假设状态列不会有高基数,最好使用其他列作为分区键。例如,如果您有 10 个节点的集群,则将 status 作为分区键和 status 列只能有 2 个可能的值,那么数据将不会分布在所有节点上。一两个节点会超载,其他节点根本没有数据。

    你可以像这样创建你的表,除非你有一个更好的分区键列:

    CREATE TABLE requisition_status (id bigint, status text, PRIMARY KEY(id,status));
    

    以这种方式定义主键将使您的id 作为分区键,status 作为集群键,您可以在查询 where 子句中使用它们。

    【讨论】:

      猜你喜欢
      • 2017-03-18
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 2015-08-30
      • 2018-10-30
      相关资源
      最近更新 更多