database-design - Cassandra:升级和搜索分区键不同
问题描述
我需要检索具有特定状态的所有申请。
我考虑过创建一个包含两列的表:
Requisiton ID || Status
但是有一个问题:当我想更新状态时,我会搜索requisiton id(因此这将是我的分区键)。但是当我查询时,我会搜索状态(以获取具有特定状态的所有申请),因此将最后一个作为我的分区键。
这种场景下如何选择分区键?让status和requisition ID都假设这个角色看起来不是很有效(因为每条记录都可能最终在不同的节点中)。也许建议使用不同的数据库模型?
提前致谢!
解决方案
Partition Key
用于标识必须写入哪些节点数据/存在哪些节点数据。
Clustering key
用于根据列对分区内的数据进行排序。
假设状态列不会有高基数,最好使用其他列作为分区键。例如,如果您有 10 个节点的集群,则将 status 作为分区键和 status 列只能有 2 个可能的值,那么数据将不会分布在所有节点上。一两个节点会超载,其他节点根本没有数据。
你可以像这样创建你的表,除非你有一个更好的分区键列:
CREATE TABLE requisition_status (id bigint, status text, PRIMARY KEY(id,status));
以这种方式定义主键将使您id
成为分区键和status
集群键,您可以在查询 where 子句中使用它们。
推荐阅读
- flutter - 我创建了一个 Flutter Widget,但它没有显示在 AVD 上
- php - 如何修改 sanitize_user WordPress 函数以接受西里尔文的用户名
- opentbs - 您可以使用 OPENTBS_EDIT_ENTITY 更改 Word 设置吗?
- javascript - 本地主机/5000 不工作。当我运行 node server.js 时如何让这个 ro 工作
- c# - 如何沿路径为圆设置动画
- python - 检查一个值是否等于给定值
- amazon-web-services - 如何在 aws workmail/ 中获取 messageId 遍历工作邮件消息
- python - 如何沿行将相关数组项合并为一个?
- reactjs - 在 React 中获取路由中的错误
- nginx - t2 (AWS EC2) 服务器上的简单 Nginx 配置在子目录上提供 504 网关超时