我正在设计数据仓库架构。
在探索从生产环境中提取数据并投入数据仓库的各种选择时,我遇到了许多主要建议以下两种方法的文章 -
- 生产数据库 ----> 数据仓库(星型模式) ----> OLAP立方体
- 生产数据库 ----> 暂存数据库 ----> 数据仓库(星型模式) ----> OLAP立方体
我仍然不确定哪种方法在性能和减少生产数据库处理负载方面更好。
在设计数据仓库时,您认为哪种方法更好?
我正在设计数据仓库架构。
在探索从生产环境中提取数据并投入数据仓库的各种选择时,我遇到了许多主要建议以下两种方法的文章 -
- 生产数据库 ----> 数据仓库(星型模式) ----> OLAP立方体
- 生产数据库 ----> 暂存数据库 ----> 数据仓库(星型模式) ----> OLAP立方体
我仍然不确定哪种方法在性能和减少生产数据库处理负载方面更好。
在设计数据仓库时,您认为哪种方法更好?
ETL = 提取(Extract)、转换(Transform)和加载(Load)。在转换方面,暂存数据库会提供帮助。个人建议始终包含一个暂存数据库和 ETL 步骤。
暂存数据库可协助将源数据转换为与数据仓库事实和维度目标结构等效的格式。它还将您的仓库和仓库 ETL 过程与源数据分离。
如果您的数据仓库目标表几乎与生产数据库表相同,只是有一些附加的维度字段,那么您可能可以忽略暂存数据库。这将节省一些开发时间。但我不建议这样做,因为:
不过,您很可能需要执行某种数据操作(将日期转换为 DATE_DIM 键、聚合值等),此时暂存数据库将有助于将转换逻辑和计算与数据仓库操作(维度化数据)分离。
您可能也会遇到这种模式:
[PROD DB] -(ETL)-> [RAW DB] -(ETL)-> [STAGING DB] -(ETL)-> [DW DB] -(ETL)-> [DM DB]
如果性能考虑很重要,您可能希望查看它。在您的情况下,RAW_DB 可以是您生产数据库的完全 1:1 副本,并且创建它的 ETL 步骤可能只是从最近的夜间备份重新创建 DB。 (传统上,RAW_DB 用于从各种外部来源获取数据,每个字段均为纯文本,然后将这些字段转换为其预期的数据类型,并在遇到异常时处理。当您只有一个来源并且其为强类型规范化的数据库时,这不再是问题)
从这个 RAW_DB 中,下一个 ETL 过程将清除并填充 staging,使得 STAGING DB 包含即将进入仓库的所有新/更新记录。也有可能存在一些缺点,这些缺点对您可能重要,也可能不重要。其中最主要的一个缺点就是需要另外一个数据库服务器。如果您使用同一个服务器来托管生产和/或数据仓库数据库,则许多优点可能没有意义。
[DM DB]
是什么? - pim