papi酱|关于OLTP 和OLAP 干货知识分享

papi酱|关于OLTP 和OLAP 干货知识分享

文章图片

papi酱|关于OLTP 和OLAP 干货知识分享

文章图片

papi酱|关于OLTP 和OLAP 干货知识分享

文章图片

papi酱|关于OLTP 和OLAP 干货知识分享

OLTP和OLAP这两个概念在十来年前、十几年前BI这个词还不是那么普及的时候 , 还经常放在一起做比较 , 现在已经很少再单独拿出来做对比了 , 但也总还是有人会问到 , 我在这里大概讲下两个概念的差别和联系 。
什么是OLTP
OLTP英文全称是Online Transaction Processing System , 在线事务处理系统 。 OLAP英文全称是Online Analytical Processing System , 在线分析处理系统 。 从名词上看差异就是一个是事务处理 , 一个是分析处理 。 这个名词从英文翻译过来还是有些生硬 , 换种简单的方式来理解OLTP就可以理解为日常的业务系统 , 比如像ERP、OA、CRM等等 , 这些业务系统主要是管理企业的基本业务流程 , 对数据的处理方式主要是以增、删、改为主 。 也有查询 , 但查询的SQL的结构相对比较简单 。

什么是OLAP
OLAP就可以理解为分析型系统 , 比如在BI应用中 , 支撑到前端可视化分析的数据仓库 。 BI底层使用到的数据库通常我们会称为数据仓库 , 数据仓库的主要目的一个是打通各个业务系统即OLTP的数据库 , 整合之后提供给前端BI可视化分析工具或者报表工具来使用 。 如果只是把BI定义为数据可视化或者可视化的工具 , 就有些过于狭义了 。 实际上BI不仅仅只包含数据可视化 , 更应该包含数据仓库 , 数据仓库是整个BI的核心部分 , 所以谈到OLAP的时候就一定会谈到BI 。

OLTP与OLAP的关系
第一 , 在底层数据处理层面 , OLTP以SQL增删改处理为主 , OLAP以SQL查询操作为主 。 数据来源层面 , OLTP的数据来源就是它们前端的应用 , 就是B/S架构或者C/S架构的B Browser浏览器或者C Client , 就理解为用户在各种系统上录入数据就可以了 。
第二 , OLAP的数据来源就是不同的OLTP数据库 , 所以OLAP本身是不产生数据的 , 通过ETL从OLTP抽取数据到OLAP数据库即数据仓库中做整合清洗达到可分析的数据标准 。
第三 , OLTP数据处理的时间相对较短 , 增、删、改操作 , 就像在页面上点击一个提交案例、下一步操作等等;但是OLAP数据处理的时间可能就会很长 , 比如一个大查询可能查询的数据量非常长 , 相对增删改时间周期会拉的更长一些 , 取决于OLAP数据结构的规范性以及返回数据量的大小 。
第四 , OLTP也有查询操作 , 但查询的操作都相对比较简单;OLAP的查询相对可以很复杂;

第五 , OLTP系统在底层数据库的设计上通常采用3NF设计方式 , 避免数据冗余 , 很适合频繁的增删改操作;OLAP系统主要是面向分析型应用准备的 , 因此在底层数据库即数据仓库的设计上通常会采用反三范式的方式 , 比如Kimball的维度建模方式 , 刻意的保留数据冗余 , 很适合分析查询操作 。 当然 , 在OLAP系统底层数据仓库的架构中也有采用3NF建模的 , 主要目的是为了统一业务数据标准 , 但真正面向分析服务的时候还是会在3NF的基础上再构建一套反三范式的Kimball星型模型或者雪花型模型的数据架构 。
第六 , OLTP由于采用3NF建模 , 所以对数据的完整性要求很高 , 必须采用完整性约束 。 但是OLAP本身就不是面向业务交易信息的 , 不对业务过程负责 , 并且数据也不会频繁修改 , 所以是没有完整性约束这一说的 。 比如OLTP里面一个事务没有提交成功 , 或者失败了 , 事务是要回滚的 。 OLAP里面没有这种处理 , 跑不成功再重新跑一遍就可以了 。