关于OLTP 和OLAP 干货知识分享

news2024/11/15 17:56:06

OLTP 和 OLAP 这两个概念在十来年前、十几年前BI这个词还不是那么普及的时候,还经常放在一起做比较,现在已经很少再单独拿出来做对比了,但也总还是有人会问到,我在这里大概讲下两个概念的差别和联系。

什么是OLTP

OLTP 英文全称是 Online Transaction Processing System,在线事务处理系统。OLAP 英文全称是 Online Analytical Processing System,在线分析处理系统。从名词上看差异就是一个是事务处理,一个是分析处理。这个名词从英文翻译过来还是有些生硬,换种简单的方式来理解 OLTP 就可以理解为日常的业务系统,比如像 ERP、OA、CRM 等等,这些业务系统主要是管理企业的基本业务流程,对数据的处理方式主要是以增、删、改为主。也有查询,但查询的SQL的结构相对比较简单。

CRM可视化分析 - 派可数据商业智能BI可视化分析平台

什么是OLAP

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

商业智能BI系统 - 派可数据商业智能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 的查询相对可以很复杂;

雪花型建模 - 派可数据商业智能BI可视化分析平台

第五,OLTP系统在底层数据库的设计上通常采用3NF设计方式,避免数据冗余,很适合频繁的增删改操作;OLAP系统主要是面向分析型应用准备的,因此在底层数据库即数据仓库的设计上通常会采用反三范式的方式,比如Kimball 的维度建模方式,刻意的保留数据冗余,很适合分析查询操作。当然,在OLAP系统底层数据仓库的架构中也有采用3NF建模的,主要目的是为了统一业务数据标准,但真正面向分析服务的时候还是会在3NF的基础上再构建一套反三范式的Kimball星型模型或者雪花型模型的数据架构。

第六,OLTP由于采用3NF建模,所以对数据的完整性要求很高,必须采用完整性约束。但是OLAP本身就不是面向业务交易信息的,不对业务过程负责,并且数据也不会频繁修改,所以是没有完整性约束这一说的。比如OLTP里面一个事务没有提交成功,或者失败了,事务是要回滚的。OLAP里面没有这种处理,跑不成功再重新跑一遍就可以了。

CUBE是什么

大家可以想象一下,BI前端可视化分析工具,或者报表工具从数据仓库取数去分析展现,会不会遇到一些查询性能的问题,这些问题都是怎么来的。

简单来说,分析页面刷新,前端浏览器不管是报表数据集模式,还是BI分析模型模式都会有一条SQL语句跑到服务器端去做数据查询,这个查询如果是BI的话就是到数据仓库上面去查,如果是数据集报表的话可以是从数据仓库,也可以是原始的业务系统数据库,总之有一条SQL语句要执行。

SQL - 派可数据商业智能BI可视化分析平台

第一种比如方式A返回的是大宽表到前端,数据量很大,前端再计算函数、慢慢渲染数据才展现出来。

第二种比如方式B返回的查询汇总之后的结果,数据量很小,前端基本上不用做什么渲染数据就出来了。

方式A的时间损耗在哪里呢?不是在数据库服务器查询上,因为SQL可能很简单,时间的损耗大部分是在从服务器端往浏览器通过HTTP连接返回、IO开销上,以及前端函数聚合汇总、解析和渲染上。B的时间损耗在查询阶段,因为SQL有大量的汇总,时间损耗在这个地方,减少了数据的返回量,前端函数基本上不用怎么处理,页面渲染也会很快。

所以,大家看到了没有,方式B是对方式A的一种性能优化。如果把这种优化提前的比如在ETL调度中实现,头一天晚上先算好,把该聚合的数据聚合好先存到数据仓库中的某一张表里面。除了需要看明细数据的这种查询场景,其它的任何查询就直接从这张已经提前算好的表里面取数就可以了。整个的复杂的聚合过程不是在BI报表分析的时候再来计算,而是提前算好、存储,用的时候直接把聚合后的结果拉出来使用。大家看,多了一张表、多了一份存储空间,但是却把整个查询、聚合计算的时间给省下来了,这个过程就是我们经常讲到的“空间换时间”的概念。

数据可视化 - 派可数据商业智能BI可视化分析平台

但是也有一个问题啊,数据聚合的结果存放到数据仓库中,这种数据的格式、形式是不是也相当于提前固化了。比如之前发过去的SQL查询返回的就是一张事实表,里面的度量是固定的,分析的维度属性也是固定的。如果现在用户改变分析维度或者指标呢?这张事实表就不能用了,新发起的查询就得像前面方式A提到的一样来处理,这样性能就又下降了,于是又得为这种新的查询聚合结果集再提前固化一张数据集市表。这样的场景多了,维护就非常的麻烦。

所以数据人员就在想,如果我们能够提前把所有可能分析的维度和维度属性Dimension and Attribute 和所有可能分析的度量Measure 全都组合好,全部算出来把结果提前存储起来,这样后面不管什么样的用户用什么样的维度和度量(指标)组合分析,都不需要临时计算,直接去结果,这样性能是不是就可以实现百倍、千倍甚至万倍的提升了?确实如此,因为你还要考虑到并发查询的问题。

这样一做,就是一个更大范围的用空间换时间的过程,这个过程就是OLAP CUBE多维立方体的设计思想来源和原理。

OLAP CUBE是如何来实现的

比如时间、区域、产品和销售收入这三个维度和指标的组合。它会先跑一遍SELECT SUM(收入)FROM 表 GROUP BY 时间,接着就是SELECT SUM(收入)FROM 表 GROUP BY 时间、区域,接着就是SELECT SUM(收入)FROM 表 GROUP BY 时间、区域、产品,然后就可以是SELECT MAX(收入)FROM 表 GROUP BY 时间、区域、产品,就是把各种聚合函数、各种指标、各种维度、各种维度属性的查询SQL全都执行一遍,把结果存储起来管理起来,就变成了一个多维立方体就是CUBE。

这个CUBE本身的描述是通过一个或者一组XML文件来组成的,把里面所有可能用到的SQL在XML文件里面组织起来。真正处理这个CUBE的时候,实际上跑的是这些SQL语句,在关系型数据库中比如数据仓库中把数据取出来进行存储。所以CUBE的空间有时比数据仓库还要大,各种数据的组合都考虑到了。

数据可视化 - 派可数据商业智能BI可视化分析平台

当然,实际开发中并不会是所有的维度、所有的属性、所有的指标都有组合分析的必要,因此还可以提前做一些配置,把哪些认为可能组合分析的维度、指标关联上就可以了。

在CUBE里面就可以很灵活的做各种透视分析,数据都是秒出的。但是有一些非直接通过维度和指标组合就可以出来的数据结果就需要通过查询的方式把数据给查询出来,这个时候就要用到MDX语句。在关系型数据库上的数据操作我们通过SQL语句去搞定,在多维分析数据库CUBE上的数据操作就要使用MDX的语句去搞定。从代码量上比,MDX比SQL要少很多。比如分析去年在TOP 10消费的客户今年不在的客户有哪些,MDX可能两句话就搞定了,但是SQL就需要写一堆。

但是从便利性上来说,MDX语法更加复杂,三个月不写基本上就可以忘记差不多了,因为CUBE它是一个多维空间,不像关系型数据库是一个二维的、行列交叉一眼就能看明白。学习CUBE还是需要有一定的想象力空间,跟关系型数据库取数的逻辑思考方式完全不一样。

CUBE在一些海量数据,特别是大维度表,比如百万级别的维度、千万级的维度这种场景下分析优势还是比较明显的。

但是现在也有很多MPP数据库、列式数据库,再结合对数据仓库建模的优化,也可以解决一部分场景下的分析性能问题。现在OLAP的引擎也已经很多了,比如ClickHouse、Impala、Doris、Kylin 等等。

Kimball - 派可数据商业智能BI可视化分析平台

OLAP CUBE 的数据来源一般是来自规范的数据仓库,最好是基于Kimball 维度建模的数据仓库,本身就是标准的维度和事实,CUBE处理起来就更加的简单方便。但是在ETL调度的时候,周期就会拉的比较长,因为要先处理数据仓库的数据,再才能处理OLAP CUBE里面的数据。

OLAP 里面还有一些分类比如MOLAP、HOLAP、ROLAP,这些查查资料基本上就看明白,大概理解了就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/137054.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

81.Zabbix之Window服务器agent监控

Zabbix版本:6.2.3 1.官网上下载对应的agent Download Zabbix agents 我们下载Zabbix agent 2 2.配置Zabbix agent2 下载完成后,将压缩包复制到服务器,然后放在移至C盘目录下(其他目录也是可以的),然后进行解压。 3.修改配置文件 用文本编辑软件打开zabbix_agent2.c…

DC-4靶场练习

今天抽时间做了下DC-4的实验,整理了实验步骤,并提炼总结方法论。内网存活主机扫描命令nmap -sP 192.168.101.0/24 arp-scan -l以上IP地址使用排除法,最后得出192.168.101.79是靶机地址。探测目标开放的端口推荐masscannmap快速扫描:masscan -…

【谷粒商城基础篇】整合SpringCloud、SpringCloud alibaba

谷粒商城笔记合集 分布式基础篇分布式高级篇高可用集群篇简介&环境搭建项目简介与分布式概念(第一、二章)基础环境搭建(第三章)整合SpringCloud整合SpringCloud、SpringCloud alibaba(第四、五章)前端知…

【ACWING】【4645选数异或】

给定一个长度为 n 的数列 A1,A2,,An 和一个非负整数 x,给定 m 次查询,每次询问能否从某个区间 [l,r] 中选择两个数使得他们的异或等于 x。 输入格式 输入的第一行包含三个整数 n,m,x。 第二行包含 n 个整数 A1,A2,,An。 接下来 m 行,每行包含…

单片机基础之初识串口

目录 一、初识串口 1、串口基本知识 2、串口的特点 3、了解下全双工和半双工的区别 二、关于串口的电器标准和协议 1、RS-232 2、RS-422 3、RS-485 三、关于串口的电平 1、RS232 电平 2、TTL电平 四、串口通信 1、串口接线方式 2、串口编程要素 3、波特率 4、编…

【练习】day02(未完成版)

努力经营当下直至未来明朗! 文章目录一、选择二、编程1. 全排列2. 全排列II答案1. 选择2. 编程普通小孩也要热爱生活! 一、选择 此代码片段输出正确的值是( ) public class CharToString {public static void main(String[] ar…

Flink窗口的生命周期

🍊在 Apache Flink 中,窗口是对数据流中的一个固定数量的元素或者一段时间内的元素进行分组的一种抽象概念。窗口有自己的生命周期,即从窗口的开始到窗口的结束。 🍊窗口的开始和结束可以是以下几种情况之一: 按数据…

WALLET 通证减半:早期用户分配将降至 4%

WALLET 通证即将满 1 年,这意味着根据 Ambire 钱包白皮书,它的年度早期用户供应量将削减至 4%,随着应用率的增长,通货膨胀率将大幅降低。 WALLET 一周年 根据官方消息,WALLET 通证的生成(token generation …

差分矩阵(二维)

题目: 输入一个 n行 m列的整数矩阵,再输入 q个操作,每个操作包含五个整数 x1,y1,x2,y2,c其中 (x1,y1)(x1,y1) 和 (x2,y2) 表示一个子矩阵的左上角坐标和右下角坐标。 每个操作都要将选中的子矩阵中的每个元素的值加上 c。 请你将进行完所有…

React Native 路由篇 react-navigation

1.我这边使用的是react-navigation,参照官网安装完启动,执行 npm install react-navigation/native。在安卓模拟器会报这个错误“invariant violation: requirenativecomponent: “rncsafeareaprovider” was not found in the uimanager”,其…

Java网络编程

一、IO模型 IO模型就是说用什么样的通道进行数据的发送和接收,Java共支持3种网络编程IO模式: BIONIOAIO 1.BIO 1.1基本介绍 Blocking I/O,同步阻塞(传统阻塞型),服务器实现模式为一个连接一个线程&…

CSS初级教程(轮廓)【第五天】

CSS初级教程【第五天】【1】CSS 框模型【2】CSS 轮廓【3】CSS 轮廓宽度【4】CSS 轮廓颜色【5】CSS 轮廓简写【6】CSS 轮廓偏移【7】所有 CSS 轮廓属性CSS上回学习链接 CSS初级教程 颜色【第一天】 CSS初级教程 背景【第二天】 CSS初级教程 边框【第三天】 CSS初级教程 边距、高…

数据压缩算法PCA使用指南

来源:投稿 作者:小灰灰 编辑:学姐 PCA主成分分析算法 PCA的使用范围 PCA(principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据压缩算法。 在PCA中,数据从原来的坐标系转换到新的坐标…

【2023.01.03】定时执行专家 V6.5 更新日志 - TimingExecutor V6.5 Change Log

目录 ◆ 最新版下载链接 ◆ 软件更新日志 – TimingExecutor Full Change Log ▼ 2023-01-03 V6.5 ▼ 2022-12-25 V6.4 ▼ 2022-11-15 V6.3 ▼ 2022-10-01 V6.2 ▼ 2022-07-30 V6.1(Build 769.30072022) ▼ 2022-06-30 V6.0 ▼ 2022-…

《学术规范与论文写作》总结

文章目录一、写作规范二、写作准备三、论文架构3.1 标题3.2 摘要3.3 关键词(可省)3.4 引言3.5 相关工作(研究背景)3.6 实现细节3.7 实验部分3.8 结论四、写作技巧五、其他技巧5.1 算法伪代码5.2 图片5.3 写作语言一、写作规范 写…

短视频剪辑素材在哪里找?

视频剪辑没素材,推荐5个网站帮你解决,免费可商用,建议收藏! 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 网站有超多视频素材,全部都是高清无水印,各种类型都有,像自然、城市…

【Linux】文件操作|文件描述符|重定向

文章目录1.文件操作系统调用的几个基本接口openwritereadlseekwrite read close lseek ,对比C文件相关接口2.如何理解文件操作?3.文件描述符fd文件描述符的分配规则重定向使用 dup2 系统调用进行重定向4.在自己的shell中添加重定向功能:1.文件操作系统调…

唯品会api_sign分析

本次分析的案例是唯品会app,版本号:7.45.6 抓个包,请求头中有个api_sign,该字段就是本次分析的对象。 1.jadx 静态分析 直接搜索关键词:api_sign= 跟进去,来到这里。 这里用到了VCSPSecurityBasicService.apiSign()方法,双击两下,找到函数的定义地方。 这里引用到的方…

【机器学习实战】四、实现线性回归模型案例

线性回归案例 一、初始化方法 1.对数据进行预处理模块,调用prepare_for_training方法,得到返回值data_processed, features_mean, features_deviation 2.得到所有的特征个数,即data的特征维数的列(行shape[0],列shape[1]) 3.初始…

怎么获取level2行情接口数据?

怎么获取level2行情接口数据比较方便呢?其实level2行情接口可以实时计算沪深所有股票数据,主要是可以让交易者方便引用和计算公式再进入股票池,就比如说一个分笔数据含有10-20个分笔数据,用分笔数据计算的资金流入数据不准确&…