数据库和数据仓库是程序员接触比较多的两个东西,不知大家有没问题自己这个问题,这两个有啥区别?
定义数据库:传统的关系型数据库的主要应用是OLTP(联机事务处理),主要是基本的、日常的事务处理,例如商城交易系统。
数据仓库:数据仓库系统的主要应用主要是OLAP(联机分析系统),从名字上看就是支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
发展演变史光从定义上,我们似乎只知道结果,数据库侧重事务,实时性,而数据仓库侧重分析,大数据量的查询,下面将举例从演变史角度来说明。
基本每家电商公司都会经历,从只需要业务数据库到要数据仓库的阶段。本文以当前最红火的电商行业来举例。
阶段一:小作坊时期。
初始电商啥都没,一个网页前端,几台后台服务器加上一个数据库,oracle或mysql,电商网站便搭建完成了,便可以开门迎客了。soeasy,简洁、粗暴、高效、有效。
阶段二:步入正轨。
好巧不巧,电商踩在了风口上,流量来了,订单量从每天的几笔,到几十笔,到几千笔,公司业务蒸蒸日上。这时,小作坊时期的普通查询已经有压力了,扛不住查询了,需要升级架构变成多台服务器和多个业务数据库(量大+分库分表),于是加服务器和数据库。
这个阶段的业务数字和指标还可以勉强从业务数据库里查询,但是也快顶不住了
阶段三:独角兽
公司持续发展,终于,在经过3年的发展后,随着业务指数级的增长,数据量的会陡增,公司角色也越来越多,除了开始的CEO,CFO,又来了COO,CMO,CIO等等,还有一堆中层。管理层需要面临的问题越来越复杂,越来越深入。高管们关心的问题,从最初非常粗放的:“昨天的收入是多少”、“上个月的PV、UV是多少”,逐渐演化到非常精细化和具体的用户的集群分析,特定用户在某种使用场景中,例如“20~30岁女性用户在过去五年的第一季度化妆品类商品的购买行为与公司进行的促销活动方案之间的关系”。
这类非常具体,且能够对公司决策起到关键性作用的问题,基本很难从业务数据库从调取出来。原因在于:
1、业务中的数据库是面向事务设计的,每次只读取一小部分,而查询分析往往一次就查询大量数据,容易拖垮数据库。如:查询过去一年交易量最高的10个用户,这个需求就需要查询过去一年的所有订单。
2、数据库针对分析的函数支持不足,操作不方便
到阶段三时,数据仓库就要闪亮登场了,公司也算要仅需信息化阶段了,数据仓库专门面向少量写,多次查询分析的场景。
常用数据库数据仓库数据库:
MySQL,Oracle,SqlServer等
数据仓库比较流行的有:AWSRedshift,Greenplum,Hive等