cassandra - 是否需要使用所有定义为主键的列来查询 Cassandra 数据库?

标签 cassandra nosql data-modeling

我正在使用 Cassandra 数据库,需要定义主键,它是分区键和集群键的组合。根据业务需求,需要基于客户编号createdAt(Unix时间戳值)两个字段的组合来查询cassandra数据库。这些列不能用作主键,因为它们无法唯一标识数据库中的行。那么,从数据库中添加uuid列作为集群键以使主键唯一,这样主键将成为 - customerNumber(分区键)、createdAt(集群键)、uuid(集群键)。但是数据库永远不会根据整个主键进行查询。它将始终根据主键的部分进行查询,即 Customer NumbercreatedAtuuid 永远不会用于查询数据库。

最佳答案

因此,如果我理解正确,您的主键定义如下所示:

PRIMARY KEY (customerNumber,createdAt,uuid)

It will always be queried based on the part of the Primary key

是的,根据您的情况,通过 PRIMARY KEY 定义的部分进行查询是可以的。 Cassandra 尝试将查询限制在单个节点,它通过确保将整个分区写入单个节点(然后复制)来实现这一点。因此,您实际上只需要在查询中提供分区键 (customerNumber),它们就应该可以工作。

但是,提供额外的 PRIMARY KEY 组件是有帮助的。在高吞吐量场景中,结果集有效负载越小越好。

tl;博士;

通过customerNumbercreatedAt查询就可以了。

关于cassandra - 是否需要使用所有定义为主键的列来查询 Cassandra 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60404750/

相关文章:

database - 数据和存储设计以及按细节进行过滤的建模

c# - 制作魔方的对象模型

cassandra - 查询 Cassandra 的最快方法?主键还是分区键?

cassandra - YCSB for Cassandra 3.0 基准测试

python - 仅在一台机器上工作的无方案数据库解决方案?

cluster-computing - Aerospike 复制无需持久化

linux - 脚本手动工作正常但无法在 crontab 上工作

java - 如何使用Apache Avro序列化JSON文档,然后写入Cassandra?

java - 带有 jQ​​uery Ajax/JSON 前端的 MongoDB 或 CouchDB 中间件

c# - EF代码优先,单向多对多关系不是由第二个实体的Id