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

前言:数据仓库建设,初级的理解就是建表,将业务数据、日志数据、消息队列数据等,通过各种调度任务写入到表里供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阵营(上) - 知乎

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

联邦多任务蒸馏助力多接入边缘计算下的个性化服务 | TPDS 2023

联邦多任务蒸馏助力多接入边缘计算下的个性化服务 | TPDS 2023 随着移动智能设备的普及和人工智能技术的发展,越来越多的分布式数据在终端被产生与收集&#xff0c;并以多接入边缘计算(MEC)的形式进行处理和分析。但是由于用户的行为模式与服务需求的多样,不同设备上的数据分布…

【2023传智杯-新增场次】第六届传智杯程序设计挑战赛AB组-DEF题复盘解题分析详解【JavaPythonC++解题笔记】

本文仅为【2023传智杯-第二场】第六届传智杯程序设计挑战赛-题目解题分析详解的解题个人笔记,个人解题分析记录。 本文包含:第六届传智杯程序设计挑战赛题目、解题思路分析、解题代码、解题代码详解 文章目录 一.前言二.赛题题目D题题目-E题题目-F题题目-二.赛题题解D题题解-…

thinkphp6入门(12)-- 一对一关联模型

定义一对一关联&#xff0c;例如&#xff0c;一个用户都有一个个人资料。 一、两表 1.用户表:user 2.工作经验表&#xff1a;work_experience user表的id关联work_experience表的user_id。 注意看&#xff0c;user_id1的有2条工作经验 二、数据模型 主表模型&#xff1a;…

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

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

目标检测、目标跟踪、重识别

文章目录 环境前言项目复现特征提取工程下载参考资料 环境 ubuntu 18.04 64位yolov5deepsortfastreid 前言 基于YOLOv5和DeepSort的目标跟踪 介绍过针对行人的检测与跟踪。本文介绍另一个项目&#xff0c;结合 FastReid 来实现行人的检测、跟踪和重识别。作者给出的2个主…

swing快速入门(一)

注释很详细&#xff0c;直接上代码 涉及内容 1. 默认布局方式BorderLayout 2. 设置窗口位置和大小 3. 设置窗口可见性 4. panel对象&#xff08;面板容器&#xff09; 5. 文本和按钮组件的创建 6. 组件和容器的嵌套 import java.awt.*;public class Main{public static …

MN316 OpenCPU丨HTTP使用介绍

HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;即超文本传输协议&#xff0c;是一个简单的请求-响应协议&#xff0c;通常运行在TCP之上&#xff0c;它指定了客户端可能发送给服务器消息类型以及得到什么类型响应。HTTPS&#xff08;Hyper Text Transfer Protoc…

二维码智慧门牌管理系统升级:社区关怀

文章目录 前言一、系统的工作原理二、系统功能与关怀服务三、社区关怀的意义 前言 随着科技的发展&#xff0c;生活日益智能化&#xff0c;门牌系统也随之发展。近日&#xff0c;一种新型的二维码智慧门牌管理系统正在崛起&#xff0c;以创新的方式将社区关怀融入到每一个家庭…

STM32F407-14.3.9-02输出比较模式

输出比较模式 输出比较模式生成波形时 当采用上升沿或下降沿计数时&#xff0c;更改ARR的值可改变周期&#xff1b; 更改CCRx的值会影响到生成波形的相位。波形的占空比永远50% 当采用中心对齐模式时&#xff0c; 更改ARR的值可以改变周期&#xff0c;更改CCRx的值可以改…

动态规划(dp)初步学习案例讲解

问题&#xff08;来源&#xff1a;leetcode300&#xff09;&#xff1a; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&a…

HarmonyOS--ArkTS(1)--基本语法(1)

目录 基本语法概述 声明式UI描述 自定义组件 创建自定义组件 自定义组件的结构--struct &#xff0c;Component&#xff0c;build()函数 生命周期 基本语法概述 装饰器&#xff1a; 用于装饰类、结构、方法以及变量&#xff0c;并赋予其特殊的含义。如上述示例中Entry、C…

TypeScript基本语法

想在自己电脑上快速演示下方代码&#xff1f;点击ts官方演练场&#xff1a;https://www.typescriptlang.org/play 变量声明&#xff1a;TypeScript 在 Javascript的基础上加入了静态类型检查功能&#xff0c;因此每一个变量都有固定的数据类型。 //string: 字符串&#xff0c;…

GPT-4 变懒了?官方回复

你是否注意到&#xff0c;最近使用 ChatGPT 的时候&#xff0c;当你向它提出一些问题&#xff0c;却得到的回应似乎变得简短而敷衍了&#xff1f;对于这一现象&#xff0c;ChatGPT 官方给出了回应。 译文&#xff1a;我们听到了你们所有关于 GPT4 变得更懒的反馈&#xff01;我…

智能优化算法应用:基于蜉蝣算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于蜉蝣算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于蜉蝣算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蜉蝣算法4.实验参数设定5.算法结果6.参考文献7.MA…

区块链实验室(30) - 区块链期刊:Distributed Ledger Technologies: Research and Practice

区块链涉及多学科及技术&#xff0c;众多期刊接收区块链文章。Distributed Ledger Technologies: Research and Practice是ACM出版集团的一本期刊。 Distributed Ledger Technologies: Research and Practice创刊历史很短&#xff0c;始于2022年&#xff0c;出版期数也不多。 载…

FastAPI之Hello World

世界上最著名的程序 from fastapi import FastAPIapp FastAPI()app.get("/") async def root():return {"message": "Hello World"}app.get("/hello/{name}") async def say_hello(name: str):return {"message": f"…

node笔记

文章目录 一、Node.js基础1. 认识Node.js01 nodejs的特性02 使用 Node.js 需要了解多少 JavaScript03 浏览器环境vs node环境 2. 开发环境搭建3. 模块、包、commonJS02 CommonJS规范03 modules模块化规范写法 4. Npm&Yarn01 npm的使用02 全局安装 nrm03 yarn使用 5. 内置模…

数据结构之归并排序及排序总结

目录 归并排序 归并排序的时间复杂度 排序的稳定性 排序总结 归并排序 归并排序大家只需要掌握其递归方法即可&#xff0c;非递归方法由于在某些特殊场景下边界难控制&#xff0c;我们一般很少使用非递归实现归并排序。那么归并排序的递归方法我们究竟是怎样实现呢&#xff…

报错:Parsed mapper file: ‘file mapper.xml 导致无法启动

报错 &#xff1a; Logging initialized using class org.apache.ibatis.logging.stdout.StdOutImpl adapter. Registered plugin: com.github.yulichang.interceptor.MPJInterceptor3b2c8bda Parsed mapper file: file [/Mapper.xml] application无法启动 我这边产生原因是项…

JVM Optimization Learning(六)

目录 一、JVM Optimization 1、Shenandoah Shenandoah的使用方法 2、ZGC ZGC的版本更迭 ZGC的使用方法 ZGC的参数设置 3、JMH测试GC性能 一、JVM Optimization 1、Shenandoah Shenandoah是由Red Hat开发的一款低延迟的垃圾收集器&#xff0c;Shenandoah并发执行大部分…