sql - 分区键的第一个键可以是集群键吗?
问题描述
在 Cassandra 数据库中使用以下模式:
CREATE TABLE IF NOT EXISTS stackoverflow_sorted_by_key_part_two (
key_part_one UUID,
key_part_two UUID,
idempotence_key int,
data TEXT,
PRIMARY KEY((key_part_one, idempotence_key), key_part_two)
);
(key_part_one, idempotence_key)
是分区键 & key_part_two
是集群键。
key_part_two
使用上述模式,记录按升序排序(作为表索引的一部分)
但是,为了更快的选择查询(使用WHERE key_part_one == "some_uuid"
),我们希望记录按 排序(作为表索引的一部分) key_part_one
。
以下架构是否增强了选择查询性能?
CREATE TABLE IF NOT EXISTS stackoverflow_sorted_by_key_part_one (
key_part_one UUID,
key_part_two UUID,
idempotence_key int,
data TEXT,
PRIMARY KEY((key_part_one, idempotence_key), key_part_two)
)WITH CLUSTERING ORDER BY (key_part_one ASC);
解决方案
不,您不能这样做 - 您只能在WITH CLUSTERING ORDER BY
. 如果列是分区键的一部分,则它不可排序 - Cassandra 将散列函数应用于该列的值(或列,如果它是复合键),并使用该散列(令牌)来查找负责该令牌的节点。然后按聚类列排序仅在分区内发生。
PS 浏览DataStax 网站上免费提供的“Cassandra:权威指南,第 3 版”一书的第一章——它将帮助您进行 Cassandra 的数据建模。
推荐阅读
- docker - 每个容器的默认内存限制
- angularjs - Umbraco cms AngularJS正则表达式不断出现
- node.js - 如何使用本地安装的 Gulp.js v4 和 `yarn --no-bin-links`?
- android - 使用后端服务器的 Google 登录失败并出现 com.google.android.gms.common.api.ApiException: 10
- python - 如何降级 Google Colab 的 Torch 版本
- assembly - 简单的引导加载程序 [实模式 - 16 位,nasm] - 尝试读取一些击键并将其打印到屏幕上
- powershell - Office 364 审核日志:Search-UnifiedAuditLog 未被识别为 cmdlet 的名称
- reactjs - 为什么我总是在 React 中得到空文件对象?
- linux - 卷初始化时 PostgreSQL 无法在 docker 上工作
- audio - 使用 mplayer 从音频流中提取冰冷的元数据(连续)