【问题标题】:Dimension with two surrogate keys or two seperate dimensions?具有两个代理键或两个单独维度的维度?
【发布时间】:2016-02-29 13:25:07
【问题描述】:
我正在寻找维度建模的一些指导。
我正在查看一些以星型模式存储在数据库中的搜索数据。一维用于查询,一维用于登录页面。两个维度都有一个代理键,它作为外键存储在事实表中。
事实表大约有 1 亿行,每个维度大约有 10 万行。
由于这些表的连接最近花费了很长时间,我想知道将两个维度组合成一个维度是否是个好主意,以便它只连接到一个表。这两个维度是 M:N,所以新维度会非常大。
谢谢!!
【问题讨论】:
标签:
data-warehouse
dimensional-modeling
【解决方案1】:
在不了解更多数据的情况下,您的问题没有“正确”答案(例如您的事实表中是否有更多维度?您有多少查询和着陆页组合?),但很少有 cmets :
你当前的设计(我可以从这里理解)还不错,你有很多数据,你必须处理它,但是将两个维度与 100K 元素结合起来以避免连接不会对我来说似乎是正确的
尝试优化您的查询,如果没有索引,则构建索引,并行化您的查询(如果您的数据库引擎允许这样做),如果可能,请尽量避免在您的位置使用like,最后资源考虑更多的硬件或不同的数据库引擎。
如果您通常只使用其中一个维度进行查询,也许您可以考虑使用聚合表来减少行数,您将使用更多空间,但您的查询将只有一个连接和一个较小的事实表
查询可以是登录页面的子级吗? (即 stackoverflow.com 是“Guru Meditation error message”之类的查询的父级,而“stackcareers.com”是“datalake 作业池男孩”之类的查询的父级)当然,您将以相同的查询结束多个登录页面,您将需要在这种情况下分配不同的外键。但是这种不同的模型可能会导致不同的解决方案,您将只有 1:M 关系,并且可以通过登录页面维度构建聚合表,但这需要更改您的查询以提取数据。再说一次,我不知道你的数据,也许它会更有意义 Queries parent of Landing Pages...
这只是我的“想法”,没有解决方案。