我在数据库中使用此模式管理一个工具列表:
[id] int PRIMARY
[name] varchar每隔几秒钟,每个工具都会发出一个测量值。我将使用以下模式将其保存在OLAP存储中:
[toolID] int
[time] timestamp
[measurement] int(我们还没有选择OLAP存储,但假设由于数据数量、语义和将要运行的查询类型,我们需要OLAP存储)
如何查询测量值大于100的工具名称列表?面临的挑战是,我需要同时连接OLAP和OLTP存储的数据。
选项1 -在OLAP中保存工具名和每个度量(去正规化)。问题是,工具名称可能已经改变,因为测量,我需要最新的。此外,每个工具还可能有更多的细节(和细节数据),不确定是否有必要将其全部保存在每个度量中。
选项2 - OLAP只返回I列表,然后向OLTP发出查询以获取名称。这将需要带有许多嵌入式ID的SQL查询,而且似乎不正确。
选项3 -每隔几分钟将所有OLTP数据同步到OLAP。但是OLAP工具并没有为更新(例如Vertica)进行优化,因此这看起来并不有效。
发布于 2013-05-24 14:45:04
通常,在OLAP/DW系统中,首选选项3,工具列表及其详细信息将存储在工具维度表中,度量将存储在度量值事实表中。
如果正如您在评论中提到的那样,您不关心在细节发生变化时保存工具详细信息的历史记录(),并且工具详细信息的频率和更新次数很小(),那么我将只更新工具维度中的记录,因为它将是相对较少的更新数量。
如果更新的频率很小,但更新的实际数量很大,那么简单地截断工具维度并插入OLTP系统中的所有工具记录可能更容易,速度也更快。在这种情况下,您需要确保有一种方法来保存维度键,以便重新连接到已经存储的事实度量。如果您使用的是基于自动生成的序列的代理键,这可能会很困难。
当工具细节的更新频率和数量很大时,真正的问题就出现了。在这种情况下,您必须后退一步,查看整个模型,并确定工具细节是否真正属于维度,或者它们是否值得拥有自己的事实表。
https://stackoverflow.com/questions/16719411
复制相似问题