作者:木东居士
最近群里很多小伙伴都问了数据库和数据仓库的区别是什么,因此将之前写过的文章给大家再分享一遍。
很多文章再解释概念的时候,会比较抽象,因为越抽象的文字越不容易被挑战其中错误。我这里为了让大家容易理解一些,会放弃一些严谨性,从更感官地的角度描述个人的理解。
正式开始之前,简单说一下两者的区别:
- 我们现在大部分童鞋说的数据库,一般是指Mysql、SqlServer、Oracle这些数据库软件,它们的作用是存储我们的个人信息和一些交易类数据。比如你在某团或者某宝里面的个人信息,这些你会做修改,一般存放在业务数据库中。
- 数据仓库呢,一般是指一套管理+组织+分析数据的方法论,承载数据仓库的软件,在互联网行业中一般是Hive为主流。它一般存放的是行为类数据,比如你点击一次网页,这些都会被记录下来存放在数据仓库中,当然个人信息一般也会从业务数据库同步一份到数据仓库中。这些数据主要用来做分析使用。
好了,有了这些简单的描述了,大家就可以继续往下看了。
0x01 概念上的区别
数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。————百度百科
数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。————百度百科
直观上理解:相同点是两者都是存储数据。不同点是数据库主要是基本的、日常的事务处理,例如银行交易;数据仓库,支持复杂的分析操作,侧重决策支持。
0x02 举个例子
举个最常见的例子,以我们常举例的电商来讲,我们侧重于从没有数据仓库到有数据仓库的演变阶段:
第一阶段:无分析需求阶段
电商早期,基本不需要太多数据分析,先跑起来系统就行,这时候买一套电商系统,搞点服务器,加一两个研发就能跑起来了。这时候对数据的需求就是只需要有个数据库就行。最多就是看看营业额就够,不需要数据仓库。
第二阶段:简单统计需求阶段
网站做大后流量来了,客户和订单都多起来了,普通查询已经有压力了,这个时候就需要升级架构变成多台服务器和多个业务数据库(量大+分库分表),这个阶段的业务数字和指标还可以勉强从业务数据库里查询。
此时仍不太需数据仓库,数据库勉强够用,定时从从库里面统计数据就可以。
第三阶段:复杂统计需求阶段
随着业务指数级的增长,数据量的会陡增,数据来源也越来越多样,这时已经不单单是交易类数据了,用户点击、和图片等数据都多了起来。
同时公司角色也开始多了起来,开始有了 各种老板,各种运营、市场、产品的同学,大家需要面临的问题越来越复杂,越来越深入,对数据的需求也越来越复杂。而复杂的分析类计算势必会对线上的数据库造成影响。
因为,**业务数据库中的数据结构主要是为了完成交易而设计的,不是为了而查询和分析的便利设计的。**业务数据库大多是读写优化的,即又要读,也要写。
因此对于大量数据的读操作和复杂计算是支持不足。而怎么解决这个问题,此时我们就需要建立一个数据仓库了。
0x03 技术上的区别
有了上面的分析,大家可能感觉还是比较虚,那我们举一些现实工作中遇到的技术,来看一下数据库和数据仓库的区别:
- 流行的数据库:MySQL、Oracle、SqlServer等
- 流行的数据仓库:Hive、Impala、Greenplum等
划分并不绝对,比如很多公司也会用Oracle来做数据仓库,但是基本没有公司用Hive来当作业务库来使用。
0x04 模型上的区别
关于模型的区别,我写过一篇文章专门分析数据仓库和数据库建模的区别,可以参考。
0xFF 总结
总结一下:
- 数据库是面向事务的设计,数据仓库是面向主题设计的。
- 数据库一般服务于业务系统的,数据仓库一般是服务于分析系统的。
- 数据库一般存储在线交易数据,数据仓库存储的一般是历史数据。
- 数据库设计是尽量避免冗余,数据仓库在设计是有意引入冗余。
- 数据库是为捕获数据而设计,数据仓库是为分析数据而设计。