首页 > 解决方案 > Cassandra:升级和搜索分区键不同

问题描述

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

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

Requisiton ID || Status

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

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

提前致谢!

标签: database-designcassandradata-modeling

解决方案


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

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

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

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

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

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


推荐阅读