两者定义
当今的数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。
OLTP:Online Transaction Processing联机事务处理,强调实时处理、快速响应,应用于各类交易系统、管理系统。
OLAP:Online Analytical Processing联机分析处理,强调理解数据,面向于决策分析。OLAP委员会对联机分析处理的定义为:使分析人员、管理人员或执行人员能够从多种角度对从原始数据中转化出来的、能够真正为用户所理解的、并真实反映企业维特性的信息进行快速、一致、交互的存取,从而获得对数据更深入了解的一类软件技术。经典应用譬如著名的啤酒与尿布案例。
基本差别
OLTP与OLAP面向不同的应用场景和处理需求,对各项指标都有不同的要求。简言之,OLTP主要进行操作型处理,OLAP主要进行分析型处理。
当我们去设计并实现一个业务系统时,通常会对系统的响应时间、吞吐量、并发量提出较高的要求。对于数据的各级缓存、读写分离是常见的设计。
而OLAP强调对数据的分析挖掘,从多维的视角观察数据、分析数据并做出决策。OLAP的基本多维分析操作有钻取(Drill-up和Drill-down)、切片(Slice)和切块(Dice)、以及旋转(Pivot)等。
数据库与数据仓库
数据库:是一种逻辑概念,用来存放数据的仓库,通过数据库软件来实现。数据库由很多表组成,表是二维的,一张表里面有很多字段。字段一字排开,对数据就一行一行的写入表中。数据库的表,在于能够用二维表现多维的关系。如:oracle、DB2、MySQL、Sybase、MSSQL Server等。
数据仓库:是数据库概念的升级。从逻辑上理解,数据库和数据仓库没有区别,都是通过数据库软件实现存放数据的地方。和数据库相比,数据仓库要比数据库更加庞大,主要存储历史数据,且不可更新、经常冗余,所涉及的操作主要是数据的查询。
数据仓库并不能取代数据库,两者面向不同的应用场景,是相辅相成的关系。
典型的业务数据库设计——RABC
计算机相关专业学生在初步学习数据库时,想必都读过《数据库系统概论》这本书。当我们对业务系统进行数据库设计时,主要运用实体-关系(E-R)模型(这种设计理念,是不是也能归类为面向对象设计?)。我们从具体业务中抽象出实体,以其相互之间的关系,建立E-R模型,反馈到数据库软件。设计业务数据库时,会相对注重规范性。《数据库系统概论》提到的范式概念既是对数据库设计的规范。因为只有足够规范、抽象,才能保证实时操作数据库的准确、安全、灵活关联。虽然有时,为了数据的快速读取,也会牺牲一点规范。
上图是一个基于RABC的权限系统数据库E-R模型图。其中抽象出用户、角色、权限、操作、资源5个实体。可以建立表为:用户表、角色表、权限表、操作表、资源表、用户-权限表、用户-角色表、角色-权限表。
为了增加这个权限系统的响应速度,我们可以针对具体的业务查询语句,在对应表上建立索引。《MySQL45讲》这本书中给出了很好的数据库优化示例。
另外,根据传统的权限系统设计,通常会在鉴权中加一步缓存,若能从缓存中读取到缓存结果,则不需要再从业务数据库中查询,加快鉴权速度。
关于数据仓库的几点问题
宽表or窄表?
宽表就是字段比较多的表,包含的维度层次比较多,造成冗余也比较多,毁范式设计,但是利于取数统计,而窄表往往对于OLTP比较合适,符合范式设计原则。窄表对于增删改查很方便,宽表则有利于数据统计。
雪花模型、星型模型
星型模是一种多维的数据关系,它由一个事实表和一组维表组成。每个维表都有一个维作为主键,所有这些维的主键组合成事实表的主键。强调的是对维度进行预处理,将多个维度集合到一个事实表,形成一个宽表。
当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的 "层次 " 区域,这些被分解的表都连接到主维度表而不是事实表。雪花模型更加符合数据库范式,减少数据冗余,但是在分析数据的时候,操作比较复杂,需要join的表比较多所以其性能并不一定比星型模型高。
两者对比
看到这里,其实也很明显了,星型模型是数据仓库建模的宠儿。