database - 在 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 和二级索引。这不可能是一个独特的用例。其他人是如何克服这个问题的?
解决方案
Cassandra 中不能有重复的主键(在关系数据库中也不能)。
但是您可以为每个 variable_id 存储包含该变量的 file_ids,例如:
使用 (variable_id, file_id) 作为主键并存储时间戳,或者如果该变量在每个文件中仅包含一次,则该表中的实际值。请记住 variable_id 是分区键,而 file_id 在这种情况下是集群列。因此,您可以轻松查询给定 variable_id 的所有 file_id 和值。
这是否适合取决于您的用例。如果文件太多,您可能需要将 file_ids 放入 bin 中。或者,最好按天、月或其他标准对它们进行分组,以防止分区变得太大。
推荐阅读
- excel - 在外部自动界面中单击“组合框”鼠标时出错
- angular - 在 TypeScript 中获取类的父上下文
- flutter - 无法使用真实设备在 vs 代码中运行颤振应用程序
- python-3.x - 我希望能够浏览一个列表,并将每个单词中的每个字母排序到最不常见到最常见
- python - [schema.sql]',' 附近的语法不正确。需要 ID、QUOTED_ID、STRING 或 TEXT_LEX
- reactjs - 类型 '(props: Props) => Element[]' 不可分配给类型 'FunctionComponent
' - iis - TFS 到服务器 IIS 部署 - 在应用数据中包含空文件夹
- asp.net-core - 单击 ASP .Net Core Identity Log In 按钮导致 400 错误
- python - 修复csv中额外的双引号,用于在开头和中间带有双引号的字符串?
- ruby-on-rails - 是否可以读取文件而不将其保存在 Rails 中?