Redshift 或平面设计中的维度建模 - 成本与时间

Posted

技术标签:

【中文标题】Redshift 或平面设计中的维度建模 - 成本与时间【英文标题】:Dimension modeling in Redshift or flat design - Cost vs time 【发布时间】:2020-08-17 14:51:36 【问题描述】:

我已经开始学习 AWS Redshift,并且遇到了许多我认为不支持数据仓库星形/雪花模式的事情。

根据使用响应,所有人都建议使用 Redshift 仅插入方法以获得最佳性能,因为它是为读取而设计的。但这不会增加存储成本吗?我目前正在研究 MSBI,我的事实和维度具有复杂的结构。例如:一个事实表在各种业务(数据集市)之间共享,很少有维度是类型 2(我必须在其中跟踪历史),很少有不是,很少有复杂的场景需要雪花设计。

考虑到云上的存储和计算成本,我想在云上保留最少的数据(我在我的本地系统中这样做,这有助于 4TB 存储)。

现在,如果我采用与本地相同的方法,那么我将不得不运行我的 ETL,将关键列与暂存进行比较,然后执行 CRUD,这使得将现有系统迁移到云端毫无意义. 如果我确实采用平面表结构,那么我的表中的数据最终会增加 4-6 倍,这将增加云上的存储成本,并且在其之上的计算可能会花费额外的成本。

How to handle Slowly Changing Dimension Type 2 in Redshift? Redshift Performance of Flat Tables Vs Dimension and Facts

上述问题的答案是关于平面表如何与 Redshift 更相关

https://aws.amazon.com/blogs/big-data/optimizing-for-star-schemas-and-interleaved-sorting-on-amazon-redshift/

但上面的 Redshift 博客谈到了如何优化星型模式。

星型和雪花模式在 Amazon Redshift 上运行良好,并且 添加交错排序键进一步提高了性能 减少表上更广泛的过滤谓词的 I/O 时 需要。

现在,如果我选择仅用于插入的方法(这与 Redshift 架构相得益彰),那么我最终会为存储支付更多费用。 & 如果我选择采用传统的数据仓库设计,那么我最终将支付额外的计算成本。

您是否有任何真实世界的示例可以帮助我理解您在 Redshift 中采用的方法?

【问题讨论】:

【参考方案1】:

根据我的经验,Redshift 可以很好地处理平面表,并且压缩消除了很多存储开销。不过,对于我的用例,主要关注点是让 ETL 尽可能简单。

Redshift 几乎总是建议使用 ZSTD 压缩,但对于某些维度,当您知道几乎没有不同的值时,您可以使用 BYTEDICT 获得更好的压缩。

借助支持聚合模式的良好排序键和分布键,您可以在查询平面表时充分利用集群的强大功能,而不受带宽限制。当然,具有分布式维度表的星型模式也是如此,但总会有一个维度不够小而无法分发,并且 FK 不适合作为分布键。


在深入研究 Redshift 之前,还要考虑一下 Athena 是否适合您。使用 S3 进行存储比 Redshift 磁盘便宜得多,并且在许多用例中性能相当。 Redshift Spectrum 中还有一个混合模式,您可以将旧分区卸载到 S3 并仅将最近的分区保留在较小的集群中。

【讨论】:

以上是关于Redshift 或平面设计中的维度建模 - 成本与时间的主要内容,如果未能解决你的问题,请参考以下文章

维度建模实践一例 维度还是事实

维度建模实践一例 维度还是事实

数据维度建模已消失

维度建模中事实表的两个或多个相似计数

维度建模的基本概念及过程

进销存系统的数据建模设计