2

我在我的数据库中管理具有此架构的工具列表:

[id] int PRIMARY
[name] varchar

每隔几秒钟,每个工具都会发出一个测量值。我将使用此架构将其保存在 OLAP 存储中:

[toolID] int
[time] timestamp
[measurement] int

(我们还没有选择 OLAP 存储,但假设由于数据量、语义和我们将运行的查询类型我们需要一个)

如何查询测量值大于 100 的工具名称列表?挑战在于我需要加入来自 OLAP 和 OLTP 存储的数据。

选项 1 - 在 OLAP 中还保存每次测量的工具名称(非规范化)。问题是自测量以来工具名称可能已更改,我需要最新的。此外,每个工具可能还有更多详细信息(和详细数据),不确定每次测量保存所有信息是否有意义。

选项 2 - OLAP 仅返回 ID 列表,然后我向 OLTP 发出查询以获取名称。这将需要具有许多嵌入式 ID 的 SQL 查询,而且似乎不正确。

选项 3 - 每隔几分钟将所有 OLTP 数据同步到 OLAP。但是 OLAP 工具没有针对更新进行优化(例如 Vertica),因此这似乎效率不高。

4

1 回答 1

3

通常,在 OLAP/DW 系统中,选项 3是首选,工具列表及其详细信息将存储在工具维度表中,测量值将存储在测量事实表中。

如果正如您在评论中提到的那样,当详细信息发生变化并且工具详细信息的更新频率和数量很小时,您不关心保存工具详细信息的历史记录,那么我只会更新记录在工具维度中,因为它将是相对较少数量的更新。

如果更新频率很小但实际更新次数很大,那么简单地截断 Tool 维度并插入 OLTP 系统中的所有 Tool 记录可能会更容易和更快。在这种情况下,您需要确保有一种方法可以保留维度键,以便重新连接到已存储的事实测量值。如果您使用基于自动生成序列的代理键,这可能会很困难。

当工具详细信息的更新频率和数量很大时,就会出现真正的问题。在这种情况下,您将不得不退后一步查看整个模型,并确定工具详细信息是否实际上属于某个维度,或者它们是否应该拥有自己的事实表。

于 2013-05-24T14:45:04.177 回答