Cassandra 中的超级列是传统 RDBMS 中 1:n 关系的正确模型吗

Is a supercolumn in Cassandra the right model for a 1:n relationship in a traditional RDBMS

首先,请原谅我,如果这个问题不适合堆栈溢出-老实说,我不知道该问谁或问哪里。

我遇到以下情况:在交易系统中,我们有一个 table 具有由用户执行的业务流程。这些过程可能类似于 "decommission car with ID xzy"。流程本身涉及任意任务,这些任务可能需要也可能不需要执行以完成流程。

现在,我们要在 Cassandra DB 中设置进程监控。也就是说,每天的进程数、打开的进程数、取消的进程数以及最重要的:进程在哪一步停止、取消或搁置。此外,完成一个步骤所花费的时间也很有趣。

请注意,所有这些过程和步骤都是手动完成并在系统中报告的。

现在我想知道如何对此进行最佳建模。

我正在考虑一个包含进程 ID(存储为 uuid)和有关 job/process 本身的信息的超列,以及每个步骤的行,每个步骤都使用步骤 ID(以及 UUID)作为列键。

那是合适的模型吗?

我也不确定时间值。我有整个过程的开始和结束时间以及每个步骤的开始和结束时间。鉴于大多数查询都是基于时间的,如 "how many decommission jobs were started today?",时间值至关重要。我应该使用二级索引还是 table 以时间作为列键更合适?

也许有人可以指导我正确的方向,因为我对 Cassandra 还是很陌生

亲切的问候,

克里斯

为此您不需要超级列(顺便说一句,超级列已被破坏)。您应该改用集群键。您可以从 this response 了解它们的工作原理。以下主要将允许您跟踪每个流程、任务和事件时间的状态:primary key (process_id, task_id, time)。之后您可以仅通过 process_id 或同时通过 process_id 和 task_id.

查询它