GreenPlum小结

news2025/1/23 3:59:53

什么是GreenPlum?

GreenPlum是业界最快最高性价比的关系型分布式数据库,它在开源的PostgreSQL的基础上采用MPP架构(Massive Parallel Processing,海量并行处理),具有强大的大规模数据分析任务处理能力。

GreenPlum作为大数据融合存储平台中众多数据库之一,与其他数据库系统和文件系统一起,为OceanMind提供完整的OceanStorage大数据融合存储解决方案。

GreenPlum的特点

  • 数据的强一致性:GreenPlum数据库支持分布式事务,支持ACID,保证数据库中数据的强一致性。

  • 标准SQL接口,比MapReduce接入更方便

  • 完整的分布式事务能力,确保强数据一致性

  • 近乎线性的在线扩展能力

  • 高并发数据加载技术

  • 高灵活的行、列以及混合存储及压缩技术

  • 高可用技术方案

  • 丰富的生态系统,便捷对接hadoop等

  • 良好的线性扩展能力:GreenPlum数据库采用MPP架构,其基本特征是有多台SMP(Symmetric Multi-Processor,对称多处理器)服务器通过节点互联网络连接而成,是一种Share Nothing(完全无共享)结构,因而扩展能力最强,理论上可以无限扩展。目前的技术可以实现512个节点互联,包含数千个CPU。借助MPP,Greenplum在大型数据集上执行复杂SQL分析的速度比很多解决方案都要快。Greenplum也带来了其它开源方案中没有的数据管理质量特性、升级和扩展能力。同时Greenplum也降低了大规模实时数据分析的门槛,相比于 Map-Reduce,SQL语法简单,功能强大,易上手,使用和开发成本低,易于对接其他第三方数据分析工具。

GreenPlum数据库 VS传统数据库

使用传统数据库时,我们经常会通过分库分表的方式将数据打散到多个数据库实例中。

其缺点在于可能会出现不平均的情况:数据在后端被打散成许多数据分片,但是有些分片的数据量很大,热度很高,有些分片相对来说热度较低。当进行数据统计或分析时,一部分用户数据处理速度慢,一部分用户数据处理速度快,使得许多用户的体验下降。

GreenPlum数据库采用分而治之的方法,将数据非常均衡的分布在所有节点上。而且当服务器数量不够或者计算能力不够的时候,可以在线横向扩展,此时数据库会重新做二次分片,也就是表数据需要重新分布,在保证强大处理能力的同时也时刻保持用户性能的均衡,提升用户体验。

GreenPlum分析

Greenplum是一个关系型数据库,是由数个独立的数据服务组合成的逻辑数据库。与oracle RAC的shared-Everything架构不同,greenplum采用shared-Nothing(MPP)架构,整个集群由多个数据节点(Segment Host)和控制节点(Master Host)组成。在典型的shared-Nothing中,每个节点上所有的资源的cpu、内存、磁盘都是独立的,每个节点都只有全部数据的一部分,也只能使用本节点的数据资源,节点之间的信息交互都是通过节点高速互联网络实现,其主要的优点是大规模的并行处理能力。

在Greenplum中,需要存储的数据在进入到数据时,将先进行数据分布的处理工作,将一个表中的数据平均分布到每个节点上,并为每个表指定一个分布列(distribute column),之后便根据hash来分布数据,基于shared-Nothing的原则,Greenplum这样处理可以充分发挥每个节点处IO的处理能力。Greenplum对标准SQL的支持非常完善。一个SQL执行后,经过Master节点会进行执行计划的拆分,下发到下面的n个节点中,并行处理。再到Master节点进行汇总。

大规模数据存储

GreenPlum数据库通过将数据规律地分布到多个节点上来实现大规模数据的存储,支持50PB级海量数据的存储和处理。

  • Greenplum数据库通过将数据分布到多个节点上来实现规模数据的存储。数据库的瓶颈经常发生在I/O方面,数据库的诸多性能问题最终总能归罪到I/O身上,久而久之,IO瓶颈成为了数据库性能的永恒的话题。

  • Greenplum采用分而治之的办法,将数据规律的分布到节点上,充分利用Segment主机的IO能力,以此让系统达到最大的IO能力(主要是带宽)。

  • 在Greenplum中每个表都是分布在所有节点上的。Master节点首先通过对表的某个或多个列进行hash运算,然后根据hash结果将表的数据分布到Segment节点中。整个过程中Master节点不存放任何用户数据,只是对客户端进行访问控制和存储表分布逻辑的元数据。

Greenplum提供称为“多态存储”的灵活存储方式。多态存储可以根据数据热度或者访问模式的不同而使用不同的存储方式。一张表的不同数据可以使用不同的物理存储方式。支持的存储方式包含:

  • 行存储:行存储是传统数据库常用的存储方式,特点是访问比较快,多列更新比较容易。行存储比较适合OLTP业务,适合频繁的更新或访问大部分字段的场景。Greenplum作为一款HTAP数据库,做了很多对OLTP场景的优化,在这种场景下,可以选用行存储。

  • 列存储:列存储按列保存,不同列的数据存储在不同的地方(通常是不同文件中)。适合一次只访问宽表中某几个字段的情况。列存储的另外一个优势是压缩比高。列存储更适合压缩,查询列子集时速度快,适用于分析型场景。不同列可以使用不同压缩方式:gzip(1-9),quicktz,delta,RLE,zstd

  • 外部表:数据保存在其他系统中例如HDFS,数据库只保留元数据信息。外部表是PostgreSQL的优势之一,Greenplum也继承了这一优势。历史数据和不常访问的数据存储在HDFS或者其他外部系统中。可以无缝查询所有数据。支持Text,CSV,Binary,Avro,Parquet,ORC格式。

并行数据加载

  • 并行加载技术充分利用分布式计算和分布式存储的优势,保证发挥出每一块Disk的I/O资源

  • 并行加载比串行加载,速度提高40-50倍以上,减少ETL窗口时间

  • 增加Segment和ETL Server,并行加载速度呈线性增长

主流的系统架构

主流的系统架构主要有三类:对称多处理结构(SMP),非一致存储访问结构(NUMA)和海量并行处理架构(MPP)。

SMP

较为典型的包括Oracle、MySQL等

特点

存储,包括CPU、内存和IO都是共享的。在一台机器就能支撑起整个网站的Web时代,SMP架构是非常流行的,足以支撑前端业务。

不足

扩展能力有限。随着业务的扩大,数据量的增长,在业务场景上就有了很大的限制。

NUMA

特点

拥有多个CPU模块,每个模块由多个CPU组成,有独立的本地内存;节点之间通过互联模块进行连接和信息交互,较好解决SMP系统的扩展问题。

不足

互联模块访问效率和本地内存访问不在一个效率层级,系统性能无法随着CPU数线性增加。

MPP

例如Greenplum的架构

特点

MPP是采用SMP组成的多个服务器,多个服务器共同完成任务。在硬件使用上可以发挥SMP架构的优势,多节点并行处理时,内存、CPU、网络、IO、磁盘均不共享,即Share-Nothing架构,每个节点只访问本地内存和存储,节点信息交互和节点本身是并行处理的。所有数据节点角色一样,可以提升并行计算能力。

  • Share Nothing节点之间数据不共享,只有通过网络连接实现的协同,每个节点有独立的存储和内存。

  • 数据根据某种规则(如Hash)散布到各个节点

  • 计算任务也是会发布到各个节点并行执行,后再将结果聚合到整体返回

  • 用户使用时会看做整体

不足

MPP架构也存在一些不足,如果多台服务器在进行并行处理时,如果有一台服务器出现部分性能下降,会影响到整个MPP集群的性能,即木桶的短板效应。MPP架构集群规模不能过大,不能像Hadoop那样,几千个集群同时运行某个查询逻辑。此外,并发度不能过高。MPP架构正常情况下都是进行两阶段事务提交的,需要有一个事务汇总和底层事务查询的过程,如果并发过高,资源损耗会过大,会影响到整体系统的响应。

不同的系统架构有其擅长的应用场景,很难说某个架构更好,在其擅长的应用场景下,都可以发挥其优势。

Greenplum架构

GreenPlum数据库是典型的Master/Slave架构。在Greenplum集群中,存在一个Master节点和多个Segment节点。Master实例是GreenPlum数据库服务端,服务端通过端口监听客户端连接。Segment由Master分配,管理一部分数据存储进程,每个Segment都采用独立端口监听。Master实例协调所有数据库实例,分布式请求Segment并且合并从Segment返回的结果。Greenplum数据库是由Master Server、Segment Server和Interconnect三部分组成,Master Server和Segment Server的互联使用过Interconnect。

图中的架构可以被拆解为三部分来看,第一部分是上面的Master节点,第二部分是中间的高速交互网络,第三部分是下面的Segment 节点,是存储生产数据的地方,会利用多个不同的机器,将数据均匀分布在上面。例如图中使用了5台机器,数据会被均匀分布在这5台机器上,充分利用MPP架构的优势,5台机器同时运算,从而提高查询效率。

  • Master 节点:是整个系统的控制中心和对外的服务接入点,它负责接收用户SQL请求,将SQL生成查询计划并进行并行处理优化,然后将查询计划分配到所有的Segment节点并进行处理,协调组织各个Segment节点按照查询计划一步一步地进行并行处理,最后获取到Segment的计算结果,再返回给客户端。从用户的角度看Greenplum集群,看到的只是Master节点,无需关心集群内部的机制,所有的并行处理都是在Master控制下自动完成的。Master节点一般只有一个或二个。

  • Segment节点: 是Greenplum执行并行任务的并行计算节点,它接收Master的指令进行MPP并行计算,因此所有Segment节点的计算性总和就是整个集群的性能,通过增加Segment节点,可以线性化得增加集群的处理性能和存储容量,Segment节点可以是1~10000个节点。外部数据在加到Segment时,采用并行数据流进行加载,直接加载到Segment节点,这项独特的技术是Greenplum的专有技术,保证数据在最短时间内加载到数据库中。

  • Interconnect: 是Master节点与Segment节点、Segment节点与Segment节点之间进行数据传输的组件,它基于千兆交换机或者万兆交换机实现数据再节点之间的高速传输。

Greenplum适用场景?

Greenplum虽然是关系型数据库产品,它的特点主要就是查询速度快,数据装载速度快,批量DML处理快。而且性能可以随着硬件的添加,呈线性增加,拥有非常良好的可扩展性。因此,它主要适用于面向分析的应用。比如构建企业级ODS/EDW,或者数据集市等等。

GP常用指令

GP常用指令好文参考:https://blog.csdn.net/m0_51197424/article/details/123524159

官方文档:http://docs-cn.greenplum.org/v6/admin_guide/intro/about_loading.html

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

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

相关文章

【UE4 RTS游戏】03-摄像机运动_旋转视角

效果可以通过WASD控制“CameraPawn”的移动;通过鼠标中键旋转视角;通过alt鼠标中键将视角回归默认值;通过shift加速移动。步骤打开“CameraPawnController”,给如下节点添加注释,命名为“MovementX”接下来开始开始编辑…

JDK解压安装及idea开发工具配置

1. 安装JDK 1.1 下载安装包 下载安装包,直接解压,注意,解压的路径不要有中文 1.2 配置环境变量 右键点击我的电脑,选择属性 选择高级系统设置 选择环境变量 选择新建 在变量名中输入JAVA_HOME,变量值就是1.1中压缩包…

Windows环境下实现设计模式——访问者模式(JAVA版)

我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下Windows环境下如何编程实现访问者模式(设计模式)。不知道大家有没有这样的感觉,看了一大堆编程和设计模式的书,却还是很难理解设计模式&#xff0c…

【C++】类和对象(收尾)

文章目录成员变量初始化问题初始化列表explicit关键字static成员特性:友元友元函数友元类内部类特性匿名对象成员变量初始化问题 在创建对象时,编译器通过调用构造函数,给了对象中各个成员变量一个合适的初始值。但是这并不能够称为对对象中成…

简单了解蓄电池在直流系统中的使用现状!

一般情况下,由市电通过直流配电屏为变电站的直流系统提供工作电源,包括对蓄电池组进行饱和和充电使蓄电池处于备用状态,当交流失电或系统需要进行大电流供电时,蓄电池需要迅速切入,向事故负荷、自动装置、保护装置以及…

本地套接字

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 本地套接字专栏:《Linux从小白到大神》《网络编程》 本地套接字通信需要一个文件&#xff…

tensorflow【import transformers 报错】

目录 一、安装 安装好了tensorflow,但是import时候报错: import transformers 报错 一、安装 (1)创建环境: conda create -n [name] python3.3-3.7 (2)激活环境: conda activate [name] …

Python中赋值、引用、深浅拷贝的区别和联系

文章目录一、对象的唯一id二、赋值三、可变对象和不可变对象四、函数的参数传递五、深拷贝和浅拷贝六、举个栗子6.1 不可变对象的拷贝6.2 可变对象的拷贝6.3 可变对象改变外层元素6.4 可变对象改变内层元素七、总结一、对象的唯一id python中的所有对象都有自己的唯一id&#…

典型回溯题目 - 全排列(一、二)

典型回溯题目 - 全排列(一、二) 46. 全排列 题目链接:46. 全排列状 题目大意: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 注意:(1&#xf…

Linux命令·which·whereis·locate·find

我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which 查看可执行文件的位置。whereis 查看文件的位置。 locate 配合数据库查看文件位置。find 实际搜寻硬盘查询文件名称。whichwhich命令的作用是&#x…

DJ1-1 操作系统引论

目录 一、操作系统的概念 二、操作系统的目标 三、操作系统的作用 一、操作系统的概念 定义一 操作系统是一组控制和管理计算机软硬件资源、合理地对各类作业进行调度以及方便用户使用的程序集合。 定义二 操作系统是位于硬件层(HAL)之上&#xff…

SQL 基础函数,通配符,BETWEEN ,用法复习

使用 SQL _ 通配符 下面的 SQL 语句选取 name 以一个任意字符开始,然后是 “oogle” 的所有客户: SELECT * FROM Websites WHERE name LIKE _oogle;下面的 SQL 语句选取 name 以 “G” 开始,然后是一个任意字符,然后是 “o”&am…

看完这篇我不信你不会二叉树的层序遍历【C语言】

目录 实现思路 代码实现 之前介绍了二叉树的前、中、后序三种遍历,采用的是递归的方式。今天我们来学习另外一种遍历方式——层序遍历。层序遍历不容小觑,虽然实现方法并不难,但是它所采取的思路是很值得学习的,与前三者不同&am…

学习笔记-架构的演进之容器的封装-3月day06

文章目录前言封装应用的Dockerwhy Docker not LXC?附前言 当文件系统、访问、资源都可以被隔离后,容器就已经具备它降生所需要的全部前置支撑条件了。为了降低普通用户综合使用 namespaces、cgroups 这些低级特性的门槛,2008 年 Linux Kernel 2.6.24 内…

Java中的final和权限修饰符

目录 final 常量 细节: 权限修饰符 Java权限修饰符用于控制类、方法、变量的访问范围。Java中有四种权限修饰符: 权限修饰符的使用场景: final 方法 表明该方法是最终方法,不能被重写。类 表明该类是最终类,不能被继…

Jetpack太香了,让开发效率提升了不少

作者:Jingle_zhang 第三方App使用Jetpack等开源框架非常流行,在Gradle文件简单指定即可。然而ROM内置的系统App在源码环境下进行开发,与第三方App脱节严重,采用开源框架的情况并不常见。但如果系统App也集成了Jetpack或第三方框架…

【UE4 RTS游戏】04-摄像机运动_鼠标移动到视口边缘时移动Pawn

效果可以看到当鼠标移动到视口边缘时,Pawn就会向这个方向移动。步骤打开项目设置,添加两个操作映射打开“CameraPawnController”,在事件图表中添加两个浮点型变量,一个为公有一个为私有。分别命名为“ZoomSensitivity”、“MaxAr…

【Linux】帮助文档查看方法

目录1 Linux帮助文档查看方法1.1 man1.2 内建命令(help)1 Linux帮助文档查看方法 1.1 man man 是 Linux 提供的一个手册,包含了绝大部分的命令、函数使用说明。 该手册分成很多章节(section),使用 man 时可以指定不同的章节来浏…

ubuntu 系统安装docker——使用docker打包python项目,整个流程介绍

目录 1 安装docker和配置镜像源 2 下载基础镜像 3 通过镜像创建容器 4 制作项目所需的容器 5 容器制作好后打包为镜像 6 镜像备份为.tar文件 7 从其他服务器上恢复镜像 8 docker的其他常用指令 首先科普一下镜像、容器和实例; 镜像:相当于安装包&…

怎么用消息队列实现分布式事务?

当消息队列和事务联系在一起时,它指的是消息生产者和消息消费者之间如何保持数据一致性。 什么是分布式事务? 事务是指当我们进行若干项数据更新操作时,为了保证数据的完整性和一致性,我们希望这些更新操作要么都成功&#xff0…