数据库和数据仓库、OLTP和OLAP(MOLAP)

数据库

Database,如:Oracle, Mysql, PostgreSQL,主要用于 事务处理

属于 OLTP(on-line transaction processing)

特点

  • 通常密集执行插入、更新操作,由事务管理
  • 大量并发查询,查询速度快,单次查询的数量较少(有分页)
  • 删除操作较少
  • 读和写都有优化

设计

遵守三范式,相对复杂的表结构,存储结构相对紧致,少冗余数据。

数据仓库

数据仓库,Datawarehouse,如:oracle、hive,主要用于 数据分析,支持复杂的分析操作,侧重 决策支持,并且提供直观易懂的查询结果。

属于 OLAP(On-Line Analytical Processing)

特点

  • 少量事务
  • 数据很少修改
  • 相对简单的表结构,存储结构相对松散,多冗余数据。
  • 相对复杂的查询,单次作用于相对大量的数据(历史数据)
  • 一般只是读优化。

图书案例

图书系统,有作者、图书,图书种类,发行商 等信息

数据库设计

表设计的目的是方便业务处理,要考虑 三范式,少冗余数据,如下:

六张表,分别记录了作者,图书,图书种类,发行商以及他们之间的关系。

数据仓库设计

表设计的目的是方便查询,不考虑冗余数据

如果把 业务数据库 中的数据,存储到 数据仓库 中,需要对数据进行处理:

select 
b.id,
b.title,
b.copyright,
b.isbn,
g.genre,
a.firstname as AuthorFirstName,
a.lastname as AuthorLastName,
a.dateofbirth,
a.gender,
p.name as PublisherName
from BOOKS b
left join GENRE g on b.genre = g.id
left join AUTHOR_BOOK_MAP abm on b.id = abm.bookid
left join AUTHORS a on a.id = abm.authorid
left join PUBLISHER_BOOK_MAP pbm on b.id = pbm.bookid
left join PUBLISHER p on p.id = pbm.publisherid;

感谢:https://www.zhihu.com/question/20623931

OLTP vs OLAP

数据处理大致可以分成两大类:

  • 联机事务处理 OLTP(on-line transaction processing)
  • 联机分析处理 OLAP(On-Line Analytical Processing)

OLTP

主要用来记录某类 业务、事件的发生,如购买行为,当行为产生后,系统会记录是谁在何时何地做了何事,将其以 增删改 的方式在数据库中进行处理

  • 要求实时性高
  • 稳定性强
  • 确保数据及时更新成功

是传统的 关系型数据库 的主要应用,主要是基本的、日常的 事务处理,例如银行交易。

系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作

用户并发数都很多,但他们只对数据库做很小的操作,数据库侧重于对用户操作的快速响应,这是对数据库最重要的性能要求。

一般都是高可用的 在线系统,以小的事务以及小的查询为主,评估其系统的时候

OLAP

当数据积累到一定的程度,我们需要对过去发生的事情做一个总结分析时,就需要把过去一段时间内产生的数据拿出来进行 统计分析,从中获取我们想要的信息,为公司做 决策 提供支持,这时候就是在做OLAP了。

是 数据仓库系统 的主要应用,支持复杂的 分析 操作,侧重决策,并且提供 直观易懂的查询结果。

系统则强调数据分析,强调磁盘I/O,强调分区等

一条语句的执行时间可能会非常长,读取的数据也非常多

区别

OLAP分类:MOLAP

以MOLAP分析为代表的有Cognos,SSAS,Kylin 等

设计理念是:预先 将客户的需求 计算好以结果的形式存下来

比如一张表分为10个维度,5个度量,那客户提出的需求会有2的10次方种可能,然后将这么多种可能提前计算好存储下来

当客户提出需求后,找到对应结果返回即可(好比你提前一天将领导明天会布置的任务先做好,明天领导布置对应任务后你直接告知他已做好),特点是当命中需求后返回非常快(所以MOLAP非常适合常见固定的分析场景),同等资源下支持的数据体量更大,支持的并发更多,不足则是当表的维度越多,越复杂,其所需的磁盘存储空间则越大,构建cube也需要一定的时间。


原文出处:/show_1IX2IOkuXyZZ.html