本文主要介绍数据仓库和数据库的区别,首先描述下数据仓库是什么:

数据仓库的本质还是一个数据库,它将各个异构的数据源数据库的数据给统一管理起来,并且完成了质量较差的数据的剔除、格式转换,最终按照一种合理的建模方式来完成源数据组织形式的转变,以更好的支持到前端的可视化分析。

数据仓库中主要存储的是结构化的数据,但是它的来源可以是多种类型的数据来源(结构化、半结构化、非结构化),中间需要一个ETL过程。

一、用途

数据库:主要用于事务处理,即OLTP(Transaction),也就是我们常用的面向业务的增删改查操作。常用的数据库有Mysql,Oracle,PostgreSQL。

数据仓库:主要用于数据分析,即OLAP(Analytics),供上层决策,常见于一些查询性的统计数据。常见的数仓有Greenplum,Hive。基于MYISAM存储引擎的MySQL也是可以用来做数据仓库的。

二、特性不同

由于他们的用途不同,这也决定了他们具体不同的特点:

(1)优化

数据库:因为是事务性操作,所以一般是读写优化

数据仓库:因为是数据分析,需要对大量数据进行查询,所以一般仅仅是读优化

(2)数据量

数据库:读写相对简单,一次只是对少量数据进行操作

数据仓库:查询相对复杂,一次要对大量数据进行操作

三、ETL

建立OLAP应用之前,我们要想办法把各个独立系统的数据抽取出来,经过一定的转换和过滤,存放到一个集中的地方,成为数据仓库。这个抽取,转换,加载的过程叫ETL(Extract, Transform,Load)。

1、抽取

全量抽取:适用于数据量小且不容易判断其数据发生改变的诸如关系表,维度表,配置表等

增量抽取:适用于数据量大,为了节省抽取时间而采用的抽取策略

2、清洗

空值处理:将空值替换为特定值或直接过滤掉

验证数据正确性:把不符合业务含义的数据做统一处理

规范数据格式:比如把所有日期都规范成YYYY-MM-DD的格式

数据转码:把一个源数据中用编码表示的字段通过关联编码表转换成代表其真实意义的值

数据标准统一:比如在源数据中表示男女的方式有很多种,在抽取的时候直接根据模型中定义的值做转化。

3、转换和加载

转换:用ODS中的增量或者全量数据来刷新DW中的表

加载:每insert数据到一张表都可以称为数据加载

img

四、数据仓库中数据的来源

数据仓库中的数据来源归纳起来大体有3种:

- 结构化数据:一般来自于数据库,比如MySQL等关系型数据库的表中保存的记录(rows)。即承担OLTP功能的数据载体。这类数据最好处理,因为数据表达方式作为规范,约束性最好。

- 半结构化数据:该部分数据来源较多,包括用户行为日志(如app的页面访问记录)、平台或管理服务日志(tomcat、mysql等服务日志)等等,也包括存储于MongoDB等NoSQL数据库中的记录(Docs等)。这些数据一般以Json或XML等形式存在,在ETL时难度较大。

- 非结构化数据:包括图片、音频、视频和网页等,这些数据非常复杂,信息量也很大,一般不会直接抽取出来直接保存到数仓中,而是记录他们的元数据信息(metadata),举图片为例,可能保存该图片的产生时间、格式、大小等等,至于图片本身,一般通过url链接保存在对象或文件存储系统中。

四、未来趋势

目前有个趋势是将OLTP和OLAP相融合,在同一个系统中同时提供TP和AP 2种服务,即HTAP产品,国内的数据库创业公司PingCAP的TiDB即是其中的佼佼者。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐