星型模式的 OLAP 或 OLTP?

Posted

技术标签:

【中文标题】星型模式的 OLAP 或 OLTP?【英文标题】:OLAP or OLTP for Star Schema? 【发布时间】:2018-02-16 04:55:53 【问题描述】:

出于报告/数据仓库的目的,我们计划以星型模式填充数据。

我们所有当前的数据都驻留在 Redshift 中,因为星型模式遵循表之间的传统关系。我应该选择 RDBMS 还是在 Redshift 本身上构建星型模式?

有人可以解释为 Star Schema 选择 RDBMS 与 Redshift 的优缺点吗?

【问题讨论】:

这可能是一个基于意见的问题,但 Redshift 上的列压缩意味着星型模式可能非常好,团队在博客上写了最好的方法:aws.amazon.com/blogs/big-data/… 您需要提供更多信息。 Redshift 被设计为适用于星型模式,并且适用于正确的用例。你最大的表有多大,你会向它抛出什么类型的查询? Redshift 一个 RDBMS 【参考方案1】:

进行星型架构设计涉及更多的考虑,而不仅仅是存储数据的数据库。

选择星型架构设计的一个直接原因是它的简单性和表现力:根据经验,业务事务使用事实表建模,业务实体(或业务“上下文”)建模为维度表。这种设计的一个实际结果是,无论您使用的是 SQL 还是 Tableau 或 PowerBI 等 BI/可视化工具,业务用户都将更容易理解和使用您的数据。

几乎任何 RDBMS 都将完全支持星型模式,并且在某些情况下,例如 Oracle,它可以使用特殊(位图)索引来优化星型模式上的典型查询模式。 (至少)过去 15 年都是这种情况,几乎所有主要的 RBDMS 都实施了各种规模的数据仓库。

您可以在 Redshift 中执行相同的操作:定义数据模型(星型模式)、构建数据结构(表)、将数据相应地加载到其中并照常查询。星型模式将比不相关或复杂的表结构更具表现力(因此更易于使用);在这种情况下,它实际上主要是一种抽象数据复杂性的元数据层。这是一篇文章,详细介绍了使用行业标准 TPC-DS 基准衡量 Redshift 的性能和对星型模式查询的支持的基准:https://blog.fivetran.com/warehouse-benchmark-dce9f4c529c1

您甚至不需要“适当的”数据库来启用星型架构设计,例如您实际上可以在 HDFS 上转储文件并仍然使用 Hive 在这些文件上设计星型模式,只是为了使其更易于使用,因为 Hive 将为您提供 HDFS 上的 SQL 接口,而星型模式将使 SQL 更简单、更容易理解。

【讨论】:

【参考方案2】:

两者都支持星型模式。由于您的数据已经在 Redshift 中,因此您可以通过使用该平台消除额外工作以及将数据移动到 SQL 数据库中的数据丢失/损坏风险。

您当前数据在 Redshift 中的组织方式、数据量以及您将运行的查询类型可能会影响查询性能。由于您没有从星型模式的意图开始,您的 Redshift 实例可能未针对星型模式进行优化。亚马逊对此here 有一篇博文。您可以实施的技巧取决于您当前的环境,但至少您应该能够使用数据压缩和工作负载管理建议。这个guide to Redshift 架构和功能也可以帮助您实施亚马逊优化建议。

【讨论】:

以上是关于星型模式的 OLAP 或 OLTP?的主要内容,如果未能解决你的问题,请参考以下文章

示例星型模式数据集

数据仓库建模技巧

OLAP+星型模型+雪花模型

将非星型模式数据库转换为星型模式数据库

数据仓库建设的方法

数据仓库建模与ETL实践技巧