查询Cassandra数据库是否需要使用所有定义为主键的列?
Is it necessary to use all the columns defined as the primary key to query a Cassandra database?
我正在使用 Cassandra 数据库,需要定义主键,它是分区键和集群键的组合。根据业务,需要根据两个字段的组合查询 cassandra 数据库,即 客户编号 和 createdAt (Unix 时间戳值)要求。这些列不能用作主键,因为它们不能唯一标识数据库中的一行。那么,从数据库中添加 uuid 列作为集群键以使主键唯一,这样主键将成为 - customerNumber 的组合是否正确(分区键),createdAt(集群键),uuid(集群键)。但是永远不会根据整个主键查询数据库。它将始终根据主键的部分进行查询,即 Customer Number 和 createdAt。 uuid永远不会被用来查询数据库。
所以如果我没理解错的话,你的 PRIMARY KEY 定义是这样的:
PRIMARY KEY (customerNumber,createdAt,uuid)
It will always be queried based on the part of the Primary key
是的,在您的情况下,可以通过 PRIMARY KEY 定义的 part 进行查询。 Cassandra 试图将查询限制在单个节点,它通过确保将整个分区写入单个节点(然后复制)来实现这一点。因此,您实际上只需要在查询 (customerNumber
) 中提供 分区键 ,它们应该可以工作。
但是,提供额外的 PRIMARY KEY 组件是有帮助的。在高吞吐量的场景下,你的结果集payload越小越好。
tl;博士;
通过 customerNumber
和 createdAt
查询就可以了。
我正在使用 Cassandra 数据库,需要定义主键,它是分区键和集群键的组合。根据业务,需要根据两个字段的组合查询 cassandra 数据库,即 客户编号 和 createdAt (Unix 时间戳值)要求。这些列不能用作主键,因为它们不能唯一标识数据库中的一行。那么,从数据库中添加 uuid 列作为集群键以使主键唯一,这样主键将成为 - customerNumber 的组合是否正确(分区键),createdAt(集群键),uuid(集群键)。但是永远不会根据整个主键查询数据库。它将始终根据主键的部分进行查询,即 Customer Number 和 createdAt。 uuid永远不会被用来查询数据库。
所以如果我没理解错的话,你的 PRIMARY KEY 定义是这样的:
PRIMARY KEY (customerNumber,createdAt,uuid)
It will always be queried based on the part of the Primary key
是的,在您的情况下,可以通过 PRIMARY KEY 定义的 part 进行查询。 Cassandra 试图将查询限制在单个节点,它通过确保将整个分区写入单个节点(然后复制)来实现这一点。因此,您实际上只需要在查询 (customerNumber
) 中提供 分区键 ,它们应该可以工作。
但是,提供额外的 PRIMARY KEY 组件是有帮助的。在高吞吐量的场景下,你的结果集payload越小越好。
tl;博士;
通过 customerNumber
和 createdAt
查询就可以了。