首页 > 解决方案 > 在 Cassandra 中需要重复的主键

问题描述

我知道我不能在任何数据库中拥有重复的主键,但 cassandra 限制了我仅查询复合主键中的一个键的能力。

我的用例如下:

File 1
    variableA
    variableB
    variableC

File 2
    variableC
    variableD
    variableE

我想创建如下表:

variables
==================
variable_id PK
file_id     PK
UUID        PK

files
==================
file_id     PK
...other_columns

我正在解析文件并将变量插入变量表中。后来,我想找到所有带有变量C的文件。但是,虽然我在创建记录时有 file_id,但在查询期间我没有 file_id。与其他数据库不同,cassandra 要求我在查询中提供两个 PK。这是不可能的。

我需要一些关于如何克服这个建模问题的想法。

可能会有数万亿个变量,因此不能选择 ALLOW FILTERING 和二级索引。这不可能是一个独特的用例。其他人是如何克服这个问题的?

标签: databasecassandra

解决方案


Cassandra 中不能有重复的主键(在关系数据库中也不能)。

但是您可以为每个 variable_id 存储包含该变量的 file_ids,例如:

使用 (variable_id, file_id) 作为主键并存储时间戳,或者如果该变量在每个文件中仅包含一次,则该表中的实际值。请记住 variable_id 是分区键,而 file_id 在这种情况下是集群列。因此,您可以轻松查询给定 variable_id 的所有 file_id 和值。

这是否适合取决于您的用例。如果文件太多,您可能需要将 file_ids 放入 bin 中。或者,最好按天、月或其他标准对它们进行分组,以防止分区变得太大。


推荐阅读