大数据技术5:OLAP引擎对比分析

news2024/11/17 23:38:48

前言:数据仓库建设,初级的理解就是建表,将业务数据、日志数据、消息队列数据等,通过各种调度任务写入到表里供OLAP引擎使用。但要想建好数仓也是一个复杂、庞大的工程,比如要考虑:数据清洗、数据建模(星型模型、雪花模型、宽表模型、主题、维度、指标)、数据时效性(实时、T+1)、延迟容错、机器资源等。


1、OLTP和OLAP区别

  • OLAP(On-Line Analytical Processing)联机分析处理,也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一。应用在数据仓库,使用对象是决策者。OLAP系统强调的是数据分析,响应速度要求没那么高。目前市面上主流的开源OLAP引擎包含不限于:Hive、ClickHouse、StarRocks、Presto、Kylin、Impala、Sparksql、Druid等

  •  OLTP(On-Line Transaction Processing)联机事务处理,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。它具有FASMI(Fast Analysis of Shared Multidimensional Information),即共享多维信息的快速分析的特征。主要应用是传统关系型数据库。OLTP系统强调的是内存效率,实时性比较高。Oracle、Redis、NySQL.


2、OLAP查询类型划分

  • 即席查询: 通过手写sql完成一些临时的数据分析需求,这类sql形式多变、逻辑复杂,对查询时间没有严格要求

  • 固化查询:指的是一些固化下来的取数、看数需求,通过数据产品的形式提供给用户,从而提高数据分析和运营的效率。这类的sql固定模式,对响应时间有较高要求。


3、按照架构划分的主流OLAP引擎:

  • MPP架构系统(Presto/Impala/SparkSQL/Drill等)。这种架构主要还是从查询引擎入手,使用分布式查询引擎,而不是使用hive+mapreduce架构,提高查询效率。

  • MapReduce:MapReduce是一种编程模型和分布式计算框架,用于处理大规模数据集。它由两个主要阶段组成:Map阶段和Reduce阶段。在Map阶段,数据被分割成多个小块,每个小块由独立的计算节点进行处理,并生成中间结果。在Reduce阶段,中间结果被合并和聚合,生成最终的结果。MapReduce适用于批量处理大规模数据,如日志分析、离线数据处理等。

  • 预计算系统(Druid/Kylin等)则在入库时对数据进行预聚合,进一步牺牲灵活性换取性能,以实现对超大数据集的秒级响应。

  • 搜索引擎架构的系统(es,solr等),在入库时将数据转换为倒排索引,采用Scatter-Gather计算模型,牺牲了灵活性换取很好的性能,在搜索类查询上能做到亚秒级响应。但是对于扫描聚合为主的查询,随着处理数据量的增加,响应时间也会退化到分钟级。

3.1、MapReduce

SparkSql, odps工作台就是典型的代表通过task schedule创建各类task,执行MR去处理数据,整合成需要展示的形态,。其特点就是能针对海量数据做处理,但是最大的问题就是慢。

慢的原因主要有两点 1. 任务的资源创建。 2.MR过程中中间结果在shuffle阶段的传输和存储非常耗时。

MR的适用场景是百亿级海量数据,对RT要求不敏感,分钟级以上的业务场景。

3.2、MPP[massive parallel processor]

MPP 是一种很常见的架构方式, 旨在利用了整个集群的计算能力。主要是架构形式是Master/Slave,把一次查询的计算和数据获取分布到各台slave上。

这里为了方便大家理解,举个很常见的例子来说明,如果按照对用户id分库分表的mysql集群来说,每次你查询的条件都是诸如age > 5这样的,每个分库遍历之后,由proxy聚合给到client,这样的形式也可以叫MPP架构。

整体MPP因为是SQL的查询方式,速度还是会比MR快上不少的。MPP的典型代表是GP, Impala, ES。

3.3、预聚合体系

预聚合体系非常像聚合计算统计,提前知道维度,然后预先根据维度去批量计算结果预存好数据,获得毫秒级的查询速度。

典型的代表是预定义cube的kylin 和 druid。 kylin的概念更好理解些,用的技术都是hadoop体系非常容易理解, 是通过hadoop小批量计算后把数据存在hbase里。

而druid的功能更丰富些,能接收消息队列数据,实时性更好些。

预聚合体系的场景是优点是毫秒级的数据RT,QPS比较高。缺点是不能不够动态,增添维度比较难,不能进行join。


4、MPP、Map Reduce、MPPDB区别

MPP (Massively Parallel Processing)、MapReduce 和 MPPDB(Massively Parallel Processing Database)是三个不同的概念和技术,三者定义如下:

  • MPP(Massively Parallel Processing):MPP是一种并行计算架构,用于处理大规模数据。MPP系统将数据分割成多个分片,每个分片由独立的计算节点处理。每个节点负责处理自己的数据分片,然后将结果合并。这种并行计算架构可以提高数据处理的速度和效率。

  • MapReduce:MapReduce是一种编程模型和分布式计算框架,用于处理大规模数据集。它由两个主要阶段组成:Map阶段和Reduce阶段。在Map阶段,数据被分割成多个小块,每个小块由独立的计算节点进行处理,并生成中间结果。在Reduce阶段,中间结果被合并和聚合,生成最终的结果。MapReduce适用于批量处理大规模数据,如日志分析、离线数据处理等。

  • MPPDB(Massively Parallel Processing Database):MPPDB是一种基于MPP架构的分布式数据库系统。它将数据分割成多个分片存储在不同的节点上,并利用并行计算能力进行查询和分析。MPPDB具有高度可扩展性和并行处理能力,可以处理大规模数据集,并提供高性能的查询和分析功能。

MPP是一种并行计算架构,而MapReduce是一种编程模型和分布式计算框架。
MapReduce适用于批量处理大规模数据,而MPPDB是一种分布式数据库系统,适用于实时查询和分析大规模数据。

MPPDB基于MPP架构,具有高度可扩展性和并行处理能力,而MapReduce可以在各种分布式计算框架中实现,如Hadoop。 MPPDB提供高性能的查询和分析功能,而MapReduce更适用于离线数据处理和复杂计算任务。

总的来说,MPP是一种并行计算架构,MapReduce是一种编程模型和分布式计算框架,而MPPDB是一种基于MPP架构的分布式数据库系统。它们在处理大规模数据和分布式计算方面有各自的原理和应用场景。


5、OLAP主流框架对比

OLAP核心的词汇是Analysis。既然是分析其实多的是类似COUNT,SUM,GroupBy这样的聚合操作。学术一点的是上钻,下钻,切片,切块这样的操作,这样的操作往往需要列式存储的支持才能达到更好的性能,所以往往很多OLAP引擎的底层存储就是列式的。

OLAP技术有很多类型,主要分为MPP(大规模并行)、视图预聚合、MapReduce(勉强算)几种类型。每一种类型都有其使用场景,针对业务需求能让我们更加了解对应的引擎。

5.1、Clickhouse

ClickHouse由俄罗斯第一大搜索引擎Yandex于2016年6月发布,开发语言为C++,是一个面向联机分析处理(OLAP)的开源的面向列式存储的DBMS,简称CK,与Hadoop、Spark这些巨无霸组件相比,ClickHouse很轻量级,查询性能非常好。目前国内社区火热,各个大厂纷纷跟进大规模使用。

ClickHouse从OLAP场景需求出发,定制开发了一套全新的高效列式存储引擎,并且实现了数据有序存储、主键索引、稀疏索引、数据Sharding、向量执行、剪枝优化、主备复制等丰富功能。以上功能共同为ClickHouse极速的分析性能奠定了基础。

5.2、Presto

Presto 是 Facebook 推出分布式SQL交互式查询引擎,采用MPP架构,完全基于内存的并行计算。Presto比Hive快的原因就在于不在落盘,而是全内存操作。Presto在支持的SQL计算上更加通用,更适合ad-hoc查询场景,然而这些通用系统往往比专用系统更难做性能优化,所以不太适合做对查询QPS(参考值QPS > 1000)、延迟要求比较高(参考值search latency < 500ms)的在线服务,更适合做公司内部的查询服务和加速Hive查询的服务。

5.3、Doris/StarRocks

Doris是由百度开源的一款MPP数据库,实现了MySQL协议,集成Google Mesa 和Apache Impala 的技术。DorisDB是基于 Apache Doris 做的闭源商业化产品,后该产品又基于Elastic License 2.0开源并更名为StarRocks。

5.4、Spark SQL

Spark是UC Berkeley AMP lab开源的类MapReduce的通用的并行计算框架。SparkSQL 是 Spark 处理结构化数据的模块。本质上也是基于 DAG (有向无环图,Directed Acyclic Graph的缩写,常用于建模) 的 MPP。

5.5、Kylin

Kylin 是2014年由 eBay 中国研发中心开源的OLAP引擎,提供 Hadoop/Spark 之上的 SQL 查询接口及多维分析能力以支持超大规模数据,它能在亚秒内查询巨大的Hive表。其核心技术点在于预计算和Cube(立方体模型)的设置:首先, 对需要分析的数据进行建模,框定需要分析的维度字段;然后通过预处理的形式,对各种维度进行组合并事先聚合;最后,将聚合结果以某种索引或者缓存的形式保存起来(通常只保留聚合后的结果,不存储明细数据)。这样一来,在随后的查询过程中,就可以直接利用结果返回数据。

5.6、Druid

Druid是由广告公司 MetaMarkets 于2012年开源的实时大数据分析引擎。Druid 作为MOLAP引擎,也是对数据进行预聚合。只不过预聚合的方式与Kylin不同,Kylin是Cube化,Druid的预聚合方式只是全维度进行Group-by,相当于是Kylin Cube 的 base cuboid。Druid 支持低延时的数据摄取,灵活的数据探索分析,高性能的数据聚合,简便的水平扩展。Druid支持更大的数据规模,具备一定的预聚合能力,通过倒排索引和位图索引进一步优化查询性能,在广告分析场景、监控报警等时序类应用均有广泛使用。


参考链接:

常见开源OLAP技术架构对比 - 知乎

OLAP引擎对比分析 - 知乎

大数据四大阵营之OLTP阵营(上) - 知乎

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

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

相关文章

使用Vue3+Typescript手写一个日历签到组件

设计理念 昨天写了个简单美观的日历签到组件&#xff0c;使用的是Vue3TypeScript&#xff0c;大概逻辑是先找到本月份第一天是周几&#xff0c;然后开始填充月份日期&#xff1a;weeksArray:[[]]:之后渲染到表格中&#xff0c;对于签到事件触发则先判断是否是今天且还未没有签…

计算机视觉 基于Open3D了解用于网格和点云邻域分析的KD树和八叉树

一、简述 距离计算和邻域分析是理解网格和点云的形状、结构和特征的重要工具。我们这里要基于一些3D库来提取基于距离的信息并将其可视化。 与深度图或体素相比,点云和网格表示 3D 空间中的非结构化数据。点由它们的 (X, Y, Z) 坐标表示,在 3D 空间中可能彼此靠近的两…

6.3 U-boot 启动流程详解

通过对 uboot 启动流程的梳理&#xff0c;我们就可以掌握一些外设是在哪里被初始化的&#xff0c;这样当我们需要修改这些外设驱动的时候就会心里有数。 一、链接脚本 u-boot.lds 分析 uboot 的启动流程&#xff0c;首先要找到“入口”&#xff0c;找到第一行程序在哪里。程序…

【Delphi】FMX开发 ios 和 android 异同点(踩坑记)

目录 一、前言 二、补充下基础知识 1. APP程序事件&#xff1a;TApplicationEvent 2. APP内置Web服务器或者UDP服务端或者TCP服务端 三、iOS 和 android 平台的不同点 1. TApplicationEvent的不同点&#xff1a;以下不同点&#xff0c;请仔细阅读&#xff01; 2. APP内置…

嵌入式培训-Linux系统及C编程高级-DAY6-linux shell脚本编程

Shell脚本概述 Shell脚本是利用 shell 的功能所写的一个程序。这个程序是使用纯文本文件&#xff0c;将一些 shell 的语法与命令&#xff08;含外部命令&#xff09;写在里面&#xff0c;搭配正则表达式、管道命令与数据流重定向等功能 Shell脚本编写流程 Shell脚本的文件扩展名…

luceda ipkiss教程 45:在版图上加LOGO

**在设计版图时往往需要加上公司或者学校的LOGO,只需要LOGO的图片&#xff0c;通过代码就可以将LOGO加到版图上&#xff0c;比如&#xff1a; ** 通过代码可以得到版图上的LOGO: ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/8daea33f74f342ed9f506ae5d8cea711.…

求导公式,求导的四则运算,复合函数求导

求导公式 求导的四则运算 复合函数求导

原码、反码、补码、大端、小端

原码、反码、补码 计算机中的整数有三种2进制表示方法&#xff0c;即原码、反码和补码。 三种表示方法均有符号位和数值位两部分&#xff0c;符号位都是用0表示“正”&#xff0c;用1表示“负”&#xff0c; 而数值位&#xff1a; 正数的原、反、补码都相同。负整数的三种表…

接触huggingface

接触huggingface finetuning llama 按照https://github.com/samlhuillier/code-llama-fine-tune-notebook/tree/main中的教程一步一步了解。 pip install !pip install githttps://github.com/huggingface/transformers.gitmain bitsandbytes # we need latest transforme…

QGIS003:【06工程工具栏】-新建打开保存工程、新建打印布局、布局管理器、样式管理器

摘要:QGIS工程工具栏包括新建工程、打开工程、保存工程、新建打印布局、布局管理器、样式管理器等选项,本文介绍各选项的基本操作。 实验数据: 链接:https://pan.baidu.com/s/1f8tteqbum-Ekc7ZPdQRuEg?pwd=0s1i 提取码:0s1i 一、新建工程 【工具功能】:该功能用于创…

JAVA+SSM+springboot+MYSQL企业物资库存进销存管理系统

。该系统从两个对象&#xff1a;由管理员和员工来对系统进行设计构建。主要功能包括首页、个人中心、员工管理、项目信息管理、仓库信息管理、供应商管理、项目计划管理、物资库存管理、到货登记管理、物资出库管理、物资入库管理等功能进行管理。本企业物资管理系统方便员工快…

12.8 作业 C++

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否为…

SQL语句---创建索引

介绍 使用sql语句实现创建索引。使用索引的优点是提升查询效率&#xff0c;使查询速度更快。 命令 alter table 表名 add 索引类型 索引名 (字段名);用alter table添加索引与create index区别&#xff0c;可以参考文章&#xff1a;https://www.cnblogs.com/jelly12345/p/173…

Arduino驱动MPX5700AP气压传感器(压力传感器)

目录 1、传感器特性 2、硬件原理图 3、控制器和传感器连线图 4、驱动程序 4.1、采集数据 4.2、校准传感器 MPX5700AP测量范围15~700kPa&#xff0c;支持I2C数字输出&#xff0c;可以根据已知气压值进行标定&#xff0c;可以快速、准确的测量管路或其他环境中的气压值。…

mysql的BIT数值类型

MySQL :: MySQL 8.2 Reference Manual :: 11.1.5 Bit-Value Type - BIT MySQL :: MySQL 8.2 Reference Manual :: 9.1.5 Bit-Value Literals BIT类型用来存放bit值&#xff0c;每一位是0或者1&#xff0c;允许1-64位。 例如&#xff0c;下面表定义了new这列的类型为8位的BIT…

线性回归实战

3.1 使用正规方程进行求解 3.1.1 简单线性回归 公式 &#xff1a; y w x b y wx b ywxb 一元一次方程&#xff0c;在机器学习中一元表示一个特征&#xff0c;b表示截距&#xff0c;y表示目标值。 使用代码进行实现&#xff1a; 导入包 import numpy as np import matp…

普冉(PUYA)单片机开发笔记(8): ADC-DMA多路采样

概述 上一个实验完成了基于轮询的多路 ADC 采样&#xff0c;现在尝试跑一下使用 DMA 的 ADC 多路采样。厂家例程中有使用 DMA 完成单路采样的&#xff0c;根据这个例程提供的模板&#xff0c;再加上在 STM32 开发同样功能的基础&#xff0c;摸索着尝试。 经过多次修改和测试&…

stm32使用多串口不输出无反应的问题(usart1、usart2)

在使用stm32c8t6单片机时&#xff0c;由于需要使用两个串口usart1 、usart2。usart1用作程序烧录、调试作用&#xff0c;串口2用于与其它模块进行通信。 使用串口1时&#xff0c;正常工作&#xff0c;使用串口2时&#xff0c;无反应。查阅了相关资料串口2在PA2\PA3 引脚上。RX…

Tomcat部署开源站点JPress

前言 JPress使用Java开发&#xff0c;是我们常见的开源博客系统。JPress是一个开源的WordPress插件&#xff0c;它提供了一个简单而强大的方式来创建企业级站点。该插件包括许多特性&#xff0c;例如主题定制、页面构建器、性能优化、SEO、安全、电子商务和社交媒体整合等。使用…

【无标题】安装环境

这里写目录标题 清华镜像加速 安装cuda11.3 PyTorch 1.10.1https://pytorch.org/get-started/previous-versions/[如果没有可以点Previous pyTorch Versions&#xff0c;这里面有更多的更早的版本](https://pytorch.org/get-started/locally/) 复制非空文件夹cp: -r not specif…