当前位置: 首页 > news >正文

OLAP技术的发展及趋势简述

这里写自定义目录标题

  • 历史发展
    • 基于电子表格的数据分析
    • 基于传统数据库的数据分析
    • 基于大数据的数据分析
  • 当下的现状
    • OLAP技术的分类
      • MOLAP
      • ROLAP
      • HOLAP
    • 主流的OLAP引擎
    • 新技术的普及
      • 内存向量计算
      • 列式数据存储及交换
      • 增量查询
      • 多源融合
      • 计算下推
      • 物化视图
  • 发展趋势
    • 智能化分析
    • 多源融合和自动化处理
    • 动态/虚拟列
    • HTAP

历史发展

援引网络博文中的简单总结

OLAP这个名词是数据库之父Edgar F. Codd于1993年在文章《Providing OLAP (On-Line Analytical Processing) to User-Analysts: An IT Mandate》提出,他总结了OLAP产品的12个原则,随后OLAP产品相继问世并逐渐形成今天的格局。
但第一款OLAP产品Express却于1975年问世,随着被Oracle收购后繁荣发展了30余年,最后由继任者Oracle 9i替代。这么多年过去,基本的OLAP理念和数据模型仍然未变。

基于电子表格的数据分析

例如在基于数据库的数据分析兴起以前,于1985年,Excel 1.0诞生。它是微软在Excel中集成了数据透视表功能可能是Excel产品最重要的增强功能之一,因为数据透视表已成为多维分析中最流行和使用最广泛的工具。
即使数据库和大数据普及的当下,很多简而小的账务场景下,用户依然使用Execel本身来分析数据。

基于传统数据库的数据分析

1989年,SQL语言标准诞生,它可以从关系数据库中提取和处理业务数据。这可能是个转折点。在1980‘s年代,电子表格在OLAP应用中占绝对主导地位;而1990’s年代以后,越来越多的基于数据库的OLAP应用开始出现:
例如,Microsoft于1999年发布的OLAP服务,其于2000年成为Microsoft Analysis Services。

基于大数据的数据分析

随着大数据技术的兴起,传统数据库不再能够胜任海量数据场景下的分析工作,随着Google三驾马车,分布式文件系统(Google File System)、分布式表格(BigTable)和分布式计算模型 (MapReduce),三篇论文的发表,Hadoop技术蓬勃发展,OLAP技术也随之进化,陆续出现了许多优秀的数据处理和分析工具,如Hive、Spark、Impala等等。

当下的现状

OLAP技术的分类

MOLAP

即Multi-Dimensional OLAP,是一种将数据进行多维预处理的OLAP技术,它通过将数据进行预结算,并将聚合结果存储到CUBE模型中,以多维数组的形式物化到存储系统中,从而加快后续查询。
产品有 Cognos Powerplay, Essbase, TM1, Jedox 和 icCube、Druid、Kylin等等。

ROLAP

即Relational OLAP,是一种基于关系型数据库的OLAP系统,在ROLAP系统中,数据存储在关系型数据库中,分析时直接从数据库中读取数据进行计算和分析。
产品有Vertica、Amazon Redshift、Google Dremel、Hulu Nesto、Presto、Druid、Impala、Greenplum、HAWQ和Doris等。

HOLAP

即Hybrid OLAP,融合MOLAP和MOLAP的特性,兼具两种场景下的数据分析能力。
产品有Holos、Microsoft Analysis Services,、Oracle Database OLAP Option、MicroStrategy and SAP AG BI Accelerator等。

主流的OLAP引擎

MOLAP:Druid、Kylin
ROLAP: Presto,Impala,GreenPlum,Clickhouse,Elasticsearch,Hive,Spark SQL,Flink SQL
HOLAP: Holos、Microsoft Analysis Services,、Oracle Database OLAP Option

新技术的普及

在讲计算时,不可不谈及存储,反之亦然,这两个概念本就是相互依存,相互促进,因此后面讲的概念不会区分适用于哪个层面。

内存向量计算

硬件的更新换代,影响着计算能力的提升,内存向量化计算是当下已经探索的、可行且高效的提升系统计算能力的手段。
例如基于Spark引擎的gluten、Photon项目,基于Presto/Trino的Velox项目,逐渐被应用到生产环境,计算性能确实能够有成倍的提升。

列式数据存储及交换

基本上已经是OLAP引擎的标配能力,不仅仅能够减少网络资源的开销,同时能够更快速地交换大量数据。
Apache Arrow列式数据格式,为不同第一间的数据交互和传输提供了统一的数据组织方式,许多的OLAP系统都已经支持了Arrow格式的数据格式,例如Spark、Presto/Trino。

增量查询

随着数据湖技术的发展,例如Apache Hudi、Apache Iceberg等,为OLAP引擎增添了新的动力,这些湖系统利用CDC(Changed Data Capture)弥补了HADOOP文件无法更新的问题,同时又提供了数据快照功能,因此当下的OLAP引擎也都随之进化,扩展自己的SQL语法以支持Time Travel,同时也支持在增量数据上的检索。

多源融合

即OLAP系统可以支持同时处理多个数据源,并将不同的数据源抽象为Connector,就像JDBC CONNECTOR那样的,可以把这些不同源的数据转换为自己内部的统一数据格式,以实现跨数据源的计算。

计算下推

随着多数据源的融合,也对OLAP系统的查询计划能力提出了更高的要求,由于不同的数据源所支持的数据类型、聚合方法、统计信息、过滤谓词不尽相同,因此需要OLAP系统有能力因地制宜地将合适的逻辑下推到Connector层,由Connector决定如何处理这些细节,如此才能更高效地完成查询任务。

例如,过滤条件下推到Connector/Scan已经是必不可少的能力;聚合计算下推,例如MIN/MAX聚合函数,有些Connector存储了表级/分区级的统计信息同,因此可以不必读取真实数据,就能返回聚合结果。

物化视图

物化视图实际上就是基于源表之上的预聚合的结果表,它独立于源表存储,因此会导致占用的存储空间膨胀。不过好处是利用空间换时间,SQL引擎可以改写特定模式的SQL,利用物化视图表影响查询,以加速计算。

可以参照Clickhouse中的各类MergeTree表引擎来理解物化视图,不过物化视图相对简化。

物化视图真正可靠,存在很明显的问题,就是如何解决数据同步的问题,即物化视图初始化之后,如果源表发生了更新,如何将这些更新应用到物化视图表,就需要考虑各种情况下的更新事件,以选择的方式来MERGE新数据,不过由于聚合算子通常比较复杂,难以在增量更新场景下实现物化视图表的更新,因此即使主流的OLAP引擎,如Starrocks,也仅仅支持简单的聚合函数,如MIN/MAX/SUM/COUNT等。

发展趋势

智能化分析

对于数据分析人员,使用OLAP系统不过是计算出预想的数据结构和关系,然后再在自己的场景下利用数据分析手段,找到数据与业务的关系,但随着大模型或AI技术的普及,数据从清洗、到转换、到计算、到分析、再到解释,大胆预测必将成为一个固定的套路,因此如果OLAP系统能够很容易的与嵌入到整条链路或是成为整条链路,这必将增强OLAP的价值。

多源融合和自动化处理

基于计算与存储分离的设计,一个引擎可以很容易地读取不同的数据源,从而实现跨源的数据聚集能力,同时也可以自动地对来源数据进行清理、转换。

动态/虚拟列

需要底层支持表达式列(区别于Plain列),类似于MySQL中存储JSON表达式列(虚拟列)的功能,Iceberg中利用Transformer实现隐藏分区的功能,Clickhouse中的聚合视图表的功能等,该功能可以动态扩充源表的列,同时可以由使用者决定写时计算或读时计算,以应对不同的场景。

通常底层存储的列数据都只能是基础列的数据,如name列,对应的存储值有’张三’,如果查询SQL中的过滤表达式包含了name列,且为复杂表达式,如substr(name, 10),那么在查询时肯定是不能预先知道每一个值的经过substr函数后的结果,因此必须将数据读取内存并且应用函数方法才能决定如何过滤数据或是优化查询。
当有了虚拟列的能力,可以选择在插入数据时,新增一个内部列,列名为_XX_internal,存储substr(name, 10)计算后的结果,如此当SQL中有表达式匹配就可以直接将substr(name, 10)替换成_XX_internal,避免现场计算,以加速SQL影响。
当然也可以选择_XX_internal存储的仅仅是表达式或是不存储,这样就对齐了最原始的SQL检索能力。

HTAP

即Hybrid Transaction / Analytical Processing,混合事务分析处理。当下许多OLAP引擎兼具事务的特性,同时支持OLTP和OLAP的场景,例如Starrocks、MatrixOne、Trino等,除了本身支持查询计算功能外,也在不断完善支持数据的写入能力,但写入功能的具体实现需要与底层的存储引擎配合讨论,例如当前大数据场景下比较湖仓场景下的实时CDC;同时也在丰富数据检索分析能力,如增量查询、时间旅行、基于metadata的查询优化等。

这里提到HTAP强调是融合系统,即一个系统即能执行更新、也能执行查询。至于如何合理地安排两种类型的作业需要根据场景而定,但通常OLTP作业在一个集群写入,而另外一个集群负责OLAP任务查询,它们可以共用同一套数据存储格式,也可以操作相同数据的不同存储格式。
HTAP兼容两种不同的业务场景,必然需要有trade-off,例如在行、列混合存储的情况下(像RocksDb的底层存储实现的那样在),同时也必须通过优化现有OLAP引擎,以支持混合计算。

对于一个多源融合系统来说,能够支持数据的写入,也将省去不少的其它系统上的维护工作。

文章仅仅是列举了一些比较常见且有效的改进OLAP系统的功能,也提及了一些可预见的发展方向,相信还有很多我所没了解到的新的技术、新功能,欢迎大家在评论区丰富本文的内容。

相关文章:

OLAP技术的发展及趋势简述

这里写自定义目录标题 历史发展基于电子表格的数据分析基于传统数据库的数据分析基于大数据的数据分析 当下的现状OLAP技术的分类MOLAPROLAPHOLAP 主流的OLAP引擎新技术的普及内存向量计算列式数据存储及交换增量查询多源融合计算下推物化视图 发展趋势智能化分析多源融合和自动…...

stupid_brain

前言: 本文用于记录本人AI新手期间犯的各种错误,时常更新。 正文开始: 读取数据的num_worker设置过少,以至于训练速度卡在读取数据上。训练集数据处理:数据增强有利于解决过拟合问题。模型:relu少写、batc…...

C# BackgroundWorker的使用

C# 中的 BackgroundWorker 类是 .NET Framework 提供的一个组件,用于在后台线程上异步执行长时间运行的操作,同时保持与用户界面(UI)的交互,如更新进度信息或处理取消请求。这使得可以轻松地在不冻结UI的情况下执行耗时…...

(简单有案例)前端实现主题切换、动态换肤的两种简单方式

目录 背景 (强烈推荐)实现方法1:CSS中原生变量“--”和var() 步骤1:定义css变量 步骤2:使用CSS变量 步骤3:切换主题 实现完整案例 实现方法2:link 动态引入 背景 我们需要做一个功能&#…...

wyh的迷宫

涉及知识点:求迷宫能否到达终点的,而不是求路径数的,用bfs时可以不用重置状态数组(回溯)。 题目描述 给你一个n*m的迷宫,这个迷宫中有以下几个标识: s代表起点 t代表终点 x代表障碍物 .代…...

AWS云用户创建

问题 需要给工友创建AWS云的用户,这里假设使用分配给自己AWS开发者IAM账号,给别人创建aws IAM账号。 登录系统 打开页面:https://xxx.signin.aws.amazon.com/console,使用分配的开发者账号登录。如下图: 创建用户…...

微信小程序(三十七)选项点击高亮效果

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.选择性渲染类 2.以数字为需渲染内容&#xff08;数量&#xff09; 源码&#xff1a; index.wxml <view class"Area"><!-- {{activeNumindex?Active:}}是选择性添加类名进行渲染 -->&l…...

通过Demo学WPF—数据绑定(二)

准备 今天学习的Demo是Data Binding中的Linq&#xff1a; 创建一个空白解决方案&#xff0c;然后添加现有项目&#xff0c;选择Linq&#xff0c;解决方案如下所示&#xff1a; 查看这个Demo的效果&#xff1a; 开始学习这个Demo xaml部分 查看MainWindow.xaml&#xff1a; …...

数据湖的整体思路

湖本质上是一个集中化&#xff0c;中心化的&#xff0c;一体化的存储技术&#xff0c;并且在其之上追求技术架构的统一化&#xff0c;如流批一体&#xff0c;服务分析一体化。 当数据湖成为中心&#xff0c;那么就可以围湖而建“数据服务环”&#xff0c;环上的服务包括了数仓、…...

51单片机 跑马灯

#include <reg52.h>//毫秒级延时函数 void delay(int z) {int x,y;for(x z; x > 0; x--)for(y 114; y > 0 ; y--); }sbit LED1 P1^0x0; sbit LED2 P1^0x1; sbit LED3 P1^0x2; sbit LED4 P1^0x3; sbit LED5 P1^0x4; sbit LED6 P1^0x5; sbit LED7 P1^0x6; s…...

迎新年年终总结

迎新年年终总结 1、除夕迎新年登高有感 1、除夕迎新年登高有感 除旧岁&#xff0c;迎新年。凭栏立&#xff0c;意阑珊。 天空阔&#xff0c;世道艰。唯自强&#xff0c;可彼岸。 于2024年2月9日 10:51。...

一台服务器可以支持多少TCP连接

前言 ​ 在linux系统中一切皆文件&#xff0c;每当有一个tcp连接建立&#xff0c;那么就会打开一个文件描述符。在Linux系统中&#xff0c;文件描述符打开的个数是有限制的&#xff0c;当超过这个限制的时候内核就会跑出too many open files异常。 ​ linux上能打开的最大文件…...

svg基础(六)滤镜-图像,光照效果(漫反射,镜面反射),组合

1 feImage&#xff1a;图像滤镜 feImage 滤镜从外部来源取得图像数据&#xff0c;并提供像素数据作为输出&#xff08;意味着如果外部来源是一个 SVG 图像&#xff0c;这个图像将被栅格化。&#xff09; 1.1 用法: <feImage x"" y"" width"&quo…...

电脑数据误删如何恢复?9 个Windows 数据恢复方案

无论您是由于软件或硬件故障、网络犯罪还是意外删除而丢失数据&#xff0c;数据丢失都会带来压力和令人不快。 如今的企业通常将其重要数据存储在云或硬盘上。但在执行其中任何一项操作之前&#xff0c;您很有可能会丢失数据。 数据丢失的主要原因是意外删除&#xff0c;任何…...

【doghead】uv_loop_t的创建及线程执行

worker测试程序,类似mediasoup对uv的使用,是one loop per thread 。创建一个UVLoop 就可以创建一个uv_loop_t Transport 创建一个: 试验配置创建一个: UvLoop 封装了libuv的uv_loop_t ,作为共享指针提供 对uv_loop_t 创建并初始化...

云计算运营模式介绍

目录 一、云计算运营模式概述 1.1 概述 二、云计算服务角色 2.1 角色划分 2.1.1 云服务提供商 2.1.2 云服务消费者 2.1.3 云服务代理商 2.1.4 云计算审计员 2.1.5 云服务承运商 三、云计算责任模型 3.1 云计算服务模式与责任关系图 3.2 云计算服务模式与责任关系解析…...

物资捐赠管理系统

文章目录 物资捐赠管理系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目&#xff08;9.9&#xffe5;带走&#xff09; 物资捐赠管理系统 一、项目演示 爱心捐赠系统 二、项目介绍 基于springboot的爱心捐赠管理系统 开发语言&#xff1a…...

YOLOv8改进 | 检测头篇 | 独创RFAHead检测头超分辨率重构检测头(适用Pose、分割、目标检测)

一、本文介绍 本文给大家带来的改进机制是RFAHead,该检测头为我独家全网首发,本文主要利用将空间注意力机制与卷积操作相结合的卷积RFAConv来优化检测头,其核心在于优化卷积核的工作方式,特别是在处理感受野内的空间特征时。RFAConv主要的优点就是增加模型的特征提取能力,…...

私有化部署一个吃豆人小游戏

目录 效果 安装步骤 1.安装并启动httpd 2.下载代码 3.启动httpd 使用 效果 安装步骤 1.安装并启动httpd yum -y install httpd 2.下载代码 进入目录 cd /var/www/html/ 下载 git clone https://gitee.com/WangZhe168_admin/pacman-canvas.git 3.启动httpd syste…...

社区店经营管理新思路:提升业绩的秘诀

作为一名资深的鲜奶吧创业者&#xff0c;我深知在社区经营一家店铺所面临的挑战与机遇。经过5年的探索与实践&#xff0c;我总结出了一套提升社区店业绩的秘诀&#xff0c;今天就和大家分享一下。 一、明确目标客户群体&#xff0c;精准定位 在社区开店&#xff0c;首先要明确…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...