分析型数据库:MPP 数据库的概念、技术架构与未来发展方向

news2024/12/22 22:19:45

随着企业数据量的增多,为了配合企业的业务分析、商业智能等应用场景,从而驱动数据化的商业决策,分析型数据库诞生了。由于数据分析一般涉及的数据量大,计算复杂,分析型数据库一般都是采用大规模并行计算或者分布式计算来提升它的数据处理能力。本篇文章将详细介绍 MPP 数据库的概念,解决的问题、典型的厂商以及它的技术架构和未来的发展方向。

— MPP数据库简介—

分析型数据库是数据库的一个分支,主要设计目标是存储、管理和分析数据,一般存储的数据类型多,时间维度长,主要配合企业的业务分析、商业智能等应用场景,驱动数据化的商业决策。由于数据分析一般涉及的数据量大,计算复杂,分析型数据库一般都是采用大规模并行计算或者分布式计算来提升它的数据处理能力。行业内从1984年开始推出基于多个关系数据库(Postgres为主)组成的MPP数据库方式来提升计算能力,代表性的产品有Teradata、Netezza、Vertica等。MPP全称为Massive Parallel Processing,是一种并行化的编程模型,其思想是通过管理来协调的,由多个处理单元并行处理一个程序中的不同部分,从而最终完成整个程序的计算模式。每个处理单元有自己独立的运行环境和资源。MPP数据库中每个处理单元就是一个关系数据库,通过大规模并行的关系数据库的协同来提升数据库能够处理的数据的量级和性能。基本上每个主流的关系数据库厂商都有自己的MPP版本,另外也有一些主要开发MPP的数据库厂商和开源的MPP数据库,国内近几年也涌现了不少的MPP数据库。

厂商数据库名称介绍
TeradataTeradata Database1984年推出的首个MPP数据库,采用列式存储加速分析性能,以一体机方式交付
HPVertica图灵奖得主Michael Stonebraker创立的首个真正意义上采用列式存储的MPP数据库,可运行在标准硬件上
PivotalGreenplum开源的MPP数据库,数据库实例采用PostgreSQL,可运行在标准硬件上
华为GaussDB基于Postgres-XC深度自研的分析型数据库,可运行在标准硬件上,可扩展性较好

— 总体架构 

MPP数据库一般会包含多个控制节点和多个计算节点,控制节点负责计算任务的编译、执行计划的生成和计算结果的聚合,而计算节点负责计算划分到具体数据库实例的计算任务。为了更好的可扩展性,MPP数据库一般采用Shared-nothing架构,每个数据库节点之间没有数据共享。MPP数据库一般可以通过增加数据库计算能力,此外因为多个实例,数据库总体的数据加载性能相比较单实例数据库也有很高的提升。

数据分片是能够实现并行化计算的核心,MPP数据库有多种数据分片方式,主要包括3大类:

  • Hash模式

一般适用于事实表或大表,根据一条记录的某个字段或组合字段的hash值将数据分散到某个节点上,hash函数可以有多种方式。通过根据对给定字段的hash值来做数据分布,一个大表可以均匀的分散到MPP数据库的多个节点上,当对这个表查询时,MPP数据库编译器可以根据SQL中相应的检索字段将查询快速定位到某个或几个相关的数据库节点并将SQL下发,对应的数据库节点就可以快速响应查询结果。Hash模式在真实生产中使用的比较多,不过它也有几个较明显的问题:一是Hash取值一般是跟数据库节点数量密切相关,如果数据库添加或者减少节点后,那么已经存在的数据的Hash分布就不再正确,因此需要做数据库的数据重分布,带来较大的运维成本;二是在实际操作中需要根据业务特点来设计或选择Hash字段,否则容易出现性能热点等影响数据库整体性能的问题。

  • 均匀分布模式

一般适用于一些过程中的临时表,在对表的数据的持久化过程中按照均匀分布的方式在每个数据库节点上均匀写入数据。这个模式下数据库的IO吞吐可以得到最大化利用,无论是读取还是写入,仅适合表只做一次读写的场景。

  • 全复制模式

一般适合记录数比较少的表,一般情况下在各个数据库节点都完整的存储一份数据。这类表一般情况下用于大量的分析类场景,事务类操作比较少,因此虽然存储上有明显的浪费,但是在分析性场景下不再需要将这个表在多个数据库节点上传输或复制,从而提升分析性能。

基于数据分片的方式实现了数据无共享架构,因此可以通过增加数据库实例的方式来提升数据库的性能,因此与早期的SMP共享架构数据库(典型代表Oracle RAC)相比,MPP数据库的分析性能要远远超出。此外数据库的整体并发响应,以及数据库的读写吞吐量,MPP数据库都能够通过有效的业务优化达到一个很高的水平。在MPP数据库的可扩展性方面,从中国信通院的相关测试来看,开源的MPP数据库能够支持一百节点左右的集群规模,而一些商业MPP数据库通过更好的软硬件结合已经可以实现单集群达到五百个节点。

— 开源MPP数据库Greenplum 

Greenplum是以PostgreSQL为单实例的MPP数据库,于2003年诞生,在2012年之后演进成为Pivotal Greenplum Database。Greenplum用于存储、处理海量的数据,主要用于OLAP业务。Greenplum采用MPP架构,底层的逻辑数据库采用PostgreSQL,客户端支持psql和ODBC。

Greenplum集群中有三种角色组件,Master、Segment、Interconnect。数据的分片方式以及SQL计算的分解/聚合和通用的MPP数据库原理基本一致,在此不做赘述。Master是Greenplum数据库系统的入口,接受客户端连接及提交的SQL语句,将工作负载分发给其它数据库实例(segment实例),由它们存储和处理数据。Master也负责持久化和查询系统级元数据,负责认证用户连接,接收来自客户端的SQL处理请求,最终汇总Segments的结果并返回客户端。Master Server本身采用主备方式来保证高可用。Segment是独立的PostgreSQL数据库,负责数据存储和分析的具体执行,集群中的数据分布在各个Segment上,用户不直接与Segment通信,而是通过Master交互。每个Segment的数据冗余存放在另一个Segment上,数据实时同步,当Primary Segment失效时,Mirror Segment将自动提供服务。Interconnect负责不同PostgreSQL实例之间的通信,它默认使用UDP协议以提供更好的网络性能,并通过对数据包的检验来保证可靠性。从2019年中国信通院组织的分析数据库基准测试结果来看,一共有14个产品通过测试,其中6个产品是基于Greenplum来二次开发的,这说明了Greenplum是开源MPP数据库的最受欢迎项目。除了本身开源以外,Greenplum在以下几方面也比较独特:

  • SQL兼容度:由于Greenplum基于PostgreSQL内核,因此其本身保持了关系数据库的特性以及SQL的兼容性,以及与PostgreSQL相似的安全和权限模型。此外,Greenplum支持完整的分布式事务操作和MVCC,因此在事务相关操作上也兼容标准SQL语义。
  • 分析性能:在SQL优化方面, GPORCA优化器是基于代价的优化器的一个出色的开源项目,为各种复杂的分析SQL有个极佳的执行计划。
  • 并行数据加载:Greenplum提供了并行加载的技术,其自带的gpfdist工具能够直接和每个Segment交互做并行导入。
  • 开放式的架构:由于PostgreSQL能够支持插件化的方式来自定义数据类型、函数、存储过程等能力,Greenplum也自然继承了这一特点,因此社区的开发者先后贡献了包括地理时空数据处理、机器学习、图分析、文本分析等在内的多个扩展模块,以及支持了JSON、XML等半结构化数据类型。

由于Greenplum数据库仍然是基于典型的MPP架构,因此MPP数据库的规模问题(单个集群规模在200节点以内)、多租户资源隔离问题、落后者问题等仍然存在,因此在支撑大型企业的多个业务场景时存在较大的技术挑战。由于其比较良好的SQL兼容、分布式事务、优秀的优化器等能力,Greenplum可以比较好的支持一些中小型企业的结构化数据分析任务。Greenplum自身也在努力和云计算结合来解决多租户资源隔离问题,其已经和多个公有云厂商合作推出云上的数据库服务。另外,Greenplum也在更加紧密的与PostgreSQL社区合作,积极的跟进其最新的功能。

— MPP数据库的架构问题与未来发展方向 

MPP数据库通过并行计算来解决了很多的数据分析的能力问题,不过也有它的架构缺陷,主要包括以下几个问题:数据的分布对业务的性能影响极大:在选择数据分布算法以及对应的分片字段的时候,不仅要考虑数据分布的均匀问题,还需要考虑到业务中对这个表的使用特点。如果多个业务的使用方式有明显差异,往往很难选择一个非常好的表分片字段,因此会导致一些因为数据或业务不均匀分布或跨节点数据shuffle可能引起的性能问题。落后者问题(又称Straggler Node Problem)是MPP数据库的一个重要架构问题。工作负载节点(对GPDB而言是Segment节点)是完全对称的,数据均匀的存储在这些节点,处理过程中每个节点(即该节点上的Executor)使用本地的CPU、内存和磁盘等资源完成本地的数据加工。当某个节点出现问题导致速度比其他节点慢时,该节点会成为Straggler。此时,无论集群规模多大,批处理的整体执行速度都由Straggler决定,其他节点上的任务执行完毕后则进入空闲状态等待Straggler,而无法分担其工作,如下图所示Executor 7即为落后者并最终拖慢了整个集群。当集群规模达到一定程度时,故障会频繁出现使straggler成为一个常规问题。

集群规模问题:由于MPP的“完全对称性”,即当查询开始执行时,每个节点都在并行执行完全相同的任务,这意味着MPP支持的并发数和集群的节点数完全无关。在大数据时代,对于联机查询的并发能力要求增加非常迅速,也极大的挑战了MPP架构本身。此外,MPP架构中的Master节点承担了一定的工作负载,所有联机查询的数据流都要经过该节点,这样Master也存在一定的性能瓶颈。因此很多MPP数据库在集群规模上是存在一定限制的。多租户资源隔离问题是MPP数据库一个非常难解决的一个架构问题。由于一个企业的MPP数据库一般支撑多个业务或多个租户,假如某个业务的部分SQL分析在数据库节点Node 1上产生了热点并占用了该节点绝大部分的资源,从而拖慢了所有的可能使用Node 1的其他租户或业务,导致整体业务服务能力恶化。从我们对行业的一些大型企业客户的调研结果看,这个问题是非常致命的问题,只能通过运维的手段来检测并关闭类似的热点SQL来缓解。更好的支撑AI程序处理半结构化或非结构化数据是MPP数据库的一个重要挑战,尤其是在人工智能相关的需求爆发后,NLP、智能识别等技术都需要有效的半结构化或非结构化数据的存储、检索和计算需求,而这些都不是关系数据库擅长的能力。随着硬件技术的快速发展,尤其是SSD和网络性能的大幅度提升,MPP数据库厂商都开始基于这些新硬件技术来解决当前的软件架构问题,如采用更高速的网络来提升总体的可扩展性,解决集群规模存在上限的问题。另外部分MPP数据库重新设计其执行模式,调整其计算架构同时支持MPP和DAG模式,通过更加的执行计划和Lazy Evaluation方式来解决常见的“落后者”问题。此外,近几年MPP数据库厂商都在推动存算分离架构,让底层可以直接依赖云存储等方式,从而实现云化服务,并以此来实现多租户隔离等管理能力。

— 小结—

本文介绍了分析型数据库MPP数据库,它通过大规模并行的关系数据库的协同来提升数据库能够处理的数据的量级和性能。那么,分析型数据库的另外一个发展方向是以分布式技术来代替MPP的并行计算,一方面比MPP有更好的可扩展性,另一方面可以解决MPP数据库的几个关键架构问题,下篇我们将介绍分布式分析型数据库。

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

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

相关文章

css的属性选择器

文章目录 属性选择器的原理简单的语法介绍子串值(Substring value)属性选择器 CSS 属性选择器的最基本用法复杂一点的用法层叠选择多条件复合选择伪正则写法配合 **:not()** 伪类重写行内样式 组合用法:搭配伪元素提升用户体验角标功能属性选…

基于51单片机的智能晾衣架的设计与实现(源码+论文)_kaic

【摘要】随着社会和市场的变化,我国经济的快速发展和房地产行业的快速扩张,使得装修家居行业飞速发展,在行业高速发展的同时,消费者家居智能化要求也在日益发展。随着科学技术的进步和电子技术的发展,单片机作为智能控…

Stable Diffusion一键安装器,只有2.3M

最近AI画图真的是太火了,但是Midjourney收费之后大家就不知道去哪里能用AI画图了, Stable Diffusion很多人听过,但是安装特别麻烦。所以为大家介绍一款软件,一键安装SD。 Stable Diffusion一键安装器_SD一键启动器-Stable Diffus…

LeetCode:459. 重复的子字符串 —【2、KMP算法】

🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 一、🌱459. 重复的子字符串 题目描述:给定一个非空的字符串 s &…

Docker数据管理与Docker镜像的创建

目录 1.管理数据的方式 1.数据卷 2.数据卷容器 3.容器互联(使用centos镜像) 2.Docker镜像的创建 1.基于现有镜像创建 2.基于本地模板创建 3.基于Dockerfile创建 4.Dockerfile案例 总结 1.管理数据的方式 容器中管理数据主要有两种方式&#xff1…

c++作业

自己定义mystring类实现string功能 #include <iostream> #include<cstring> using namespace std;class myString {private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度public://无参构造myString():size(10){str new …

tomcat服务搭建

系列文章目录 文章目录 系列文章目录一、Tomcat1.核心功能 二、Tomcat服务搭建1.Tomcat服务2.Tomcat 虚拟主机配置1.创建 kgc 和 benet 项目目录和文件2.修改 Tomcat 主配置文件 server.xml3.客户端浏览器访问验证 三、Tomcat多实例部署 一、Tomcat 1.核心功能 1.connector&a…

Spring Bean生命周期源码之包扫描、创建BeanDefinition、合并BeanDefinition源码

文章目录 Bean生命周期源码生成BeanDefinitionSpring容器启动时创建单例Bean合并BeanDefinition Bean生命周期源码 我们创建一个ApplicationContext对象时&#xff0c;这其中主要会做两件时间&#xff1a;包扫描得到BeanDefinition的set集合&#xff0c;创建非懒加载的单例Bea…

体验ChatGPT在具体应用场景下的能力与表现——vuedraggable的move多次触发问题

当下人工智能模型在满天飞&#xff0c;今天拿一个具体的应用场景&#xff0c;来体验下ChatGPT的能力与表现&#xff0c;看看是否能解决实际问题。 顺便填一下之前遇到的一个具体的坑&#xff1a;vuedraggable的move多次触发问题。 背景 背景是这样的&#xff0c;实现低代码开…

Hadoop启动相关命令

Hadoop启动相关配置 文章目录 Hadoop启动相关配置格式化节点的情况什么情况下Hadoop需要进行格式化节点&#xff1f; Hadoop启动步骤Hadoop的启动步骤只是start-dfs.sh即可吗 *hdfs*的web管理页面参数说明参数的评价场景 格式化节点的情况 什么情况下Hadoop需要进行格式化节点…

赛效:怎么用改图鸭进行一键Logo设计?

改图鸭工具是一款在线图像处理工具&#xff0c;可以对图片进行大小调整、添加色彩、滤镜等&#xff0c;用户使用改图鸭可快速轻松地对多种图像进行处理操作&#xff0c;另外&#xff0c;改图鸭工具还支持一键进行Logo设计&#xff0c;很多人对改图鸭工具比较陌生&#xff0c;不…

rsync 服务器备份代码

rpm -qa | grep rsync #检查rsync软件是否存在 yum -y install rsync #安装rsync服务 systemctl start rsyncd #启动rsync服务 systemctl enable rsyncd #加入rsync开机启动 systemctl reload rsyncd #重新加载rsync netstat -lnp|grep 873 #检查是否已经成功启动 firewall…

【代码随想录】刷题Day2

1.左右指针比大小 977. 有序数组的平方 class Solution { public:vector<int> sortedSquares(vector<int>& nums) {vector<int> ret nums;int left 0;int right nums.size()-1;int end nums.size();while(left<right){if(abs(nums[left])>abs…

vue-element-admin-master编译异常记录

前言 最近一直在往大前端的方向转&#xff0c;不得不说前端的知识架构还真的很庞大&#xff0c;一步一个脚印吧&#xff0c;之前消化完极简版后台项目[vue-admin-template-master]后&#xff0c;开始想看下完整版的后台[vue-element-admin-master]项目&#xff0c;奈何clone项…

ChatGPT实战100例 - (08) 设计转化为SQL并获取ER图

文章目录 ChatGPT实战100例 - (08) 设计转化为SQL并获取ER图一、需求与思路二、SQL建表三、绘制四、 总结 ChatGPT实战100例 - (08) 设计转化为SQL并获取ER图 一、需求与思路 在你还在手撸SQL&#xff1f;ChatGPT笑晕在厕所 这篇博文中 针对经典3表设计&#xff1a; 学生表 S…

【我在CSDN成长】我的两周年创作纪念日

【我在CSDN成长】我的两周年创作纪念日 一、来到CSDN的大家庭二、在CSDN的收获1.在CSDN的感受2.在CSDN的收获 三、在CSDN的未来规划憧憬 一、来到CSDN的大家庭 当看到这个信息时&#xff0c;才发现不知不觉已经在CSDN创作两年了&#xff0c;今天才腾出时间来写下这篇博文。感叹…

绕开坑坑,申请高德地图安卓appKey的步骤

在申请高德地图 appkey的时候&#xff0c;我们会采用keytool的方法来生成sha1码。这里面有坑&#xff0c;请看 PS C:\Users\cuclife.android> keytool -v -list -keystore keystore keytool 错误: java.lang.Exception: 密钥库文件不存在: keystore java.lang.Exception: 密…

涨点技巧:IOU篇---Yolov5/Yolov7引入WIoU,SIoU,EIoU,α-IoU

1.IOU介绍 IoU其实是Intersection over Union的简称,也叫‘交并比’。IoU在目标检测以及语义分割中,都有着至关重要的作用。 首先,我们先来了解一下IoU的定义: 我们可以把IoU的值定为为两个图形面积的交集和并集的比值,如下图所示: 1.1 Yolov5自带IOU方法 GIoU, DIoU,…

Kubernetes(k8s 1.23.17) 基于docker 一主两从集群环境搭建

结合网上资料&#xff0c;利用k8s最后直接支持docker的版本1.23.17搭建&#xff0c;并本地验证完成。 1 虚拟机准备 1.1 规划 系统角色/hostnameIP地址配置CentOS 7.9 &#xff08;需要7.5&#xff09;master192.168.68.1002Core、4G内存、40GB磁盘CentOS 7.9 &#xff08;需…

一篇文章告诉你,为什么移动数据捕获对运输物流公司很重要?

随着世界走向数字化和智能手机的使用增加&#xff0c;移动数据采集正在成为大多数行业的新常态。航运物流也不例外。从捕获详细的订单和交付信息到跟踪货运和仓库位置&#xff0c;条形码技术用于运输物流世界的每一步。通过智能数据采集&#xff0c;运输和物流公司可以获得更好…