Redshift 或平面设计中的维度建模 - 成本与时间
Dimension modeling in Redshift or flat design - Cost vs time
我已经开始学习 AWS Redshift,我遇到了很多我认为不支持数据仓库 star/snowflake 架构的事情。
根据使用响应,所有推荐使用 Redshift 仅插入方法以获得最佳性能,因为它专为读取而设计。但这不会增加存储成本吗?我目前正在研究 MSBI,我的事实和维度具有复杂的结构。例如:一个事实 table 在各种业务(数据集市)之间共享,很少有维度是类型 2(我必须在其中跟踪历史记录)并且很少有不是,很少有复杂的场景需要雪花设计。
考虑到云上存储和计算的成本,我想在云上保留最小的模拟数据(我在我的本地系统中也是这样做的,这有助于 4TB 存储)。
现在,如果我采用与在前提下一直采用的方法相同的方法,那么我将不得不 运行 我的 ETL,将关键列与分段进行比较,然后执行 CRUD,这使得它毫无意义将我现有的系统移动到云端。
如果我确实采用扁平 table 结构,那么我的 table 中的数据将增加 4-6 倍,这将增加云存储的成本,并且在其之上的计算可能需要额外的成本。
How to handle Slowly Changing Dimension Type 2 in Redshift?
上述问题的答案讨论了 tables 与 Redshift
的关系有多平坦table
但是上面的Redshift博客讲了如何优化星型模式。
Star and snowflake schemas run well on Amazon Redshift, and the
addition of interleaved sort keys further enhances performance by
reducing I/O for a wider range of filter predicates on a table when
needed.
现在,如果我选择仅用于插入的方法(这与 Redshift 架构相得益彰),那么我最终将支付更多的存储费用。
& 如果我选择传统的数据仓库设计,那么我将最终支付额外的计算成本。
是否有任何真实世界的例子可以帮助我理解你在 Redshift 中遵循的方法?
根据我的经验,Redshift 可以很好地处理平坦的 tables,并且压缩消除了很多存储开销。不过,对于我的用例,主要关注的是保持 ETL 尽可能简单。
Redshift 几乎总是建议 ZSTD 压缩,但对于某些维度,当您知道几乎没有不同的值时,您可以使用 BYTEDICT 获得更好的压缩。
有了良好的排序键和支持聚合模式的分布键,您可以在查询平面 table 时充分利用集群的全部功能,而不受带宽限制。当然,对于具有分布式维度 tables 的星型模式来说也是如此,但是总是有一个维度不够小,无法分配 table 并且 FK 不适合作为分发密钥。
在深入研究 Redshift 之前,请考虑一下 Athena 是否适合您。使用 S3 进行存储比 Redshift 磁盘便宜得多,而且在许多用例中性能相当。在 Redshift Spectrum 中还有混合模式,您可以在其中将旧分区卸载到 S3,并且只将最近的分区保留在较小的集群中。
我已经开始学习 AWS Redshift,我遇到了很多我认为不支持数据仓库 star/snowflake 架构的事情。
根据使用响应,所有推荐使用 Redshift 仅插入方法以获得最佳性能,因为它专为读取而设计。但这不会增加存储成本吗?我目前正在研究 MSBI,我的事实和维度具有复杂的结构。例如:一个事实 table 在各种业务(数据集市)之间共享,很少有维度是类型 2(我必须在其中跟踪历史记录)并且很少有不是,很少有复杂的场景需要雪花设计。
考虑到云上存储和计算的成本,我想在云上保留最小的模拟数据(我在我的本地系统中也是这样做的,这有助于 4TB 存储)。
现在,如果我采用与在前提下一直采用的方法相同的方法,那么我将不得不 运行 我的 ETL,将关键列与分段进行比较,然后执行 CRUD,这使得它毫无意义将我现有的系统移动到云端。 如果我确实采用扁平 table 结构,那么我的 table 中的数据将增加 4-6 倍,这将增加云存储的成本,并且在其之上的计算可能需要额外的成本。
How to handle Slowly Changing Dimension Type 2 in Redshift?
上述问题的答案讨论了 tables 与 Redshift
的关系有多平坦table但是上面的Redshift博客讲了如何优化星型模式。
Star and snowflake schemas run well on Amazon Redshift, and the addition of interleaved sort keys further enhances performance by reducing I/O for a wider range of filter predicates on a table when needed.
现在,如果我选择仅用于插入的方法(这与 Redshift 架构相得益彰),那么我最终将支付更多的存储费用。 & 如果我选择传统的数据仓库设计,那么我将最终支付额外的计算成本。
是否有任何真实世界的例子可以帮助我理解你在 Redshift 中遵循的方法?
根据我的经验,Redshift 可以很好地处理平坦的 tables,并且压缩消除了很多存储开销。不过,对于我的用例,主要关注的是保持 ETL 尽可能简单。
Redshift 几乎总是建议 ZSTD 压缩,但对于某些维度,当您知道几乎没有不同的值时,您可以使用 BYTEDICT 获得更好的压缩。
有了良好的排序键和支持聚合模式的分布键,您可以在查询平面 table 时充分利用集群的全部功能,而不受带宽限制。当然,对于具有分布式维度 tables 的星型模式来说也是如此,但是总是有一个维度不够小,无法分配 table 并且 FK 不适合作为分发密钥。
在深入研究 Redshift 之前,请考虑一下 Athena 是否适合您。使用 S3 进行存储比 Redshift 磁盘便宜得多,而且在许多用例中性能相当。在 Redshift Spectrum 中还有混合模式,您可以在其中将旧分区卸载到 S3,并且只将最近的分区保留在较小的集群中。