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

xam8gpfp  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(352)

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

7ivaypg9

7ivaypg91#

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

PRIMARY KEY (customerNumber,createdAt,uuid)

它将始终基于主键的部分进行查询
是的,在您的情况下,按主键定义的一部分进行查询是可以的。cassandra试图将查询限制到单个节点,它通过确保将整个分区写入单个节点(然后复制)来实现这一点。因此,您实际上只需要在查询中提供分区键( customerNumber ),他们应该工作。
但是,提供一个额外的主键组件是有帮助的。在高吞吐量场景中,结果集有效负载越小越好。
热释光;博士;
查询依据 customerNumber 以及 createdAt 会没事的。

相关问题