我正在使用 Cassandra 数据库,需要定义主键,它是分区键和集群键的组合。根据业务需求,需要基于客户编号和createdAt(Unix时间戳值)两个字段的组合来查询cassandra数据库。这些列不能用作主键,因为它们无法唯一标识数据库中的行。那么,从数据库中添加uuid列作为集群键以使主键唯一,这样主键将成为 - customerNumber(分区键)、createdAt(集群键)、uuid(集群键)。但是数据库永远不会根据整个主键进行查询。它将始终根据主键的部分进行查询,即 Customer Number 和 createdAt。 uuid 永远不会用于查询数据库。
最佳答案
因此,如果我理解正确,您的主键定义如下所示:
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;博士;
通过customerNumber
和createdAt
查询就可以了。
关于cassandra - 是否需要使用所有定义为主键的列来查询 Cassandra 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60404750/