加入对OLAP和操作数据的查询

时间:2013-05-23 16:39:56

标签: analytics data-warehouse olap oltp

我在我的数据库中管理了这个模式的工具列表:

[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),因此这似乎并不高效。

1 个答案:

答案 0 :(得分:3)

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

如果您在评论中提到,当细节发生变化时,您不关心保存工具详细信息的历史记录频率以及更新次数工具详细信息很小,然后我只更新工具维度中的记录,因为它将是相对较少的更新。

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

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