【发布时间】:2021-01-16 05:00:06
【问题描述】:
在学习 Redshift(我的第一个列式数据库)的过程中,我一直在努力找出设计模型的方法。列式数据库确实促进了扁平表设计,但承认星型模式或雪花模式在某些情况下可能是更好的选择。
这是一个我正在苦苦挣扎的简单例子
如您所见,多维方法的维度很少,只有 1 个事实表。我本可以让它成为雪花设计,但我为星型模式保持简单。
方法 1:使用表格中的常用列(在此场景中为人口统计数据)。这可能会减少 Customer & Store 的表大小,但会包含额外的维度。
方法 2:包含所有列的平面表格设计
我的问题:
- 数据建模器使用哪种方法在 Redshift 等列式数据库中设计数据模型?或者他们使用不同的方法?
- 考虑到这个示例,为数据仓库设计数据模型的最佳方法是什么。
- 哪种方法适合报告(考虑到客户端 PC\Laptop 的内存有限)。或者,当使用大量数据集时,甚至云报告也可能变得昂贵。 方法 3 将产生大量用于报告的数据集。如果进行报告(使用 Power BI 或 Tableau 或任何其他自我报告工具),这可能是一件代价高昂的事情 多维方法最适合自我报告(成本和性能),但它违背了列式数据库的目的。 方法 1 也适用于报告,但具有更多的连接和复杂性。
【问题讨论】:
-
否 - 多维不会破坏柱状报告的目的。您每次使用完全非规范化的平面表的唯一时间是您没有时间进行数据建模。我看不出有任何理由不使用星型模式。
-
有趣的问题。我一直认为星型模式基本上是一个平面表,它不情愿地允许与连接相关的性能损失作为一种节省磁盘空间的方法。不过,列式数据库以其他方式处理存储空间。所以,一张大平桌对我来说似乎是一个很好的方法。您应该尝试两者并发布您找到的查询性能。但是有一个问题:Redshift 表中的列数是否有限制?如果是这样,那可能会推动您的设计理念。
-
@Nick.McDermaid 但我看到有人推荐为列式数据库设计平面表。我也很困惑,因为我没有看到报告的好处,但是是的,我可以看到很大的存储节省(这对于云上的数据库很有意义)
-
@Ben 虽然 Redshift 说有 1,600 列限制,同时我听说他们说不要为了提高性能而制作大表(这对我来说没有意义,因为列式数据库都是关于列的,所以如何降低性能)。保留一个大表将大大降低存储和处理的成本,但我担心报告部分,因为它可能需要一个大数据集来处理? (我不确定报告工具如何从 redshift 中获取数据)
-
@Zerotoinfinity 我只是在考虑这个问题,并且在某些方面,列存储无论如何都会像星型模式一样工作 - 正如您所说,每列都作为自己的“表”实现.仅供参考,我不确定它如何影响您的情况,但我会避免 select * 查询 b/c 那些会迫使数据库将所有这些“列表”“加入”在一起。
标签: amazon-redshift data-modeling data-warehouse dimensions