3.数据仓库与操作型数据库对比
下面从几个重要的方面对比数据仓库与操作型数据库的区别,如表9-1所示。
操作型数据库面向的用户是开发工程师、DBA等一线工程师,主要功能是使用一些商用或开源的关系型数据库(如Oracle、SQL Server、MySQL等)进行事务处理,通常把这种事务处理过程称为联机事务处理OLTP(On-LineTransaction Processing)。OLTP数据库的设计目标是面向应用设计,核心工作是对单条数据进行高效地增、删、改、查操作。通常在数据库中存储的数据是几个月内的数据,不会存储几年的历史数据,存储的数据量一般在GB级别。数据库中表的设计需要满足第三范式的要求,尽量减少数据冗余存储。操作型数据库对于单次请求的响应时间要求非常严格,通常是毫秒级延迟,太高的延迟会影响用户的正常使用。
数据仓库(简称数仓)面向的用户是公司管理人员、数据分析师等与分析决策相关的人员,主要功能是为分析决策提供依据。通常把使用数据仓库进行分析的过程称为联机分析处理OLAP(On-LineAnalytical Processing)。在实际工作中,一般不会使用传统的操作型数据库构建数据仓库,因为关系型数据库的核心是对单条数据的事务操作,OLAP的核心是对大量的数据进行统计分析,不需要支持事务,对单条数据统计也没有任何实际意义,所以一般会使用商用的分析型数据库(如Teradata、Oracle Exadata、BD2等)或开源的大数据项目(如Hadoop、Hive等)构建企业级数据仓库。数据仓库的设计目标是面向主题设计,通常在数据仓库中会存储几年甚至十几年的历史数据,存储的数据量一般在GB甚至PB级别,数据分析人员在日常工作中需要频繁地对大量的历史数据进行统计分析。数据仓库中的表设计不需要满足第三范式,对常用的操作也不需要支持事务。对于数据仓库中的查询请求的响应时间的要求不是很高,因为更多的是对大量历史数据的统计分析请求,所以响应时间一般是秒级或分钟级,有时由于数据量非常巨大,硬件资源有限,响应时间有可能会是小时级。
数据仓库架构
在设计数据仓库之前,需要做大量的准备工作。首先,要调研数据的产生来源、数据格式、数据类型等信息,详细掌握数据源信息。其次,还要与合作的数据应用部门或团队沟通,详细了解业务需求,在数据仓库的设计过程中需要根据具体的业务需求创建主题。
前期准备工作完成之后,开始进入数据仓库设计环节。数据仓库通常采用分层设计,一般会分为临时数据存储层ODS(OperationData Store,简称ODS)、数据仓库层DW(Data Warehouse,简称DW)、数据集市层DM(Data Mart,简称DM)三层。
各分层的详细描述如下。
- ODS层:暂时存储从各种数据源导入的原始数据。ODS层存储的数据通常是没有经过加工或只进行了简单的加工,相对比较粗糙的数据。它的主要作用是为后续DW层提供集合好的数据源。
- DW层:持久化存储从ODS层经过仔细加工之后的数据。DW层存储的数据具有一致性、准确性的特点,并且存储的是没有杂质的明细数据。通常为提高DW层的查询性能,在明细数据的基础上,根据业务需求进行预聚合操作,生成汇总数据。
- DM层:数据集市层也可以称为应用层,DM层主要是各个应用部门或业务团队在DW层基础之上,进行二次加工计算,建立针对部门或业务线的数据集市,这样的数据集市可能会有多个。
数据仓库的架构如图9-3所示。