基于PostgreSQL的开源分布式数据库:Greenplum

标签: 大数据 分布式 数据库 | 发表时间:2015-11-08 23:56 | 作者:标点符
出处:http://www.biaodianfu.com

Pivotal宣布开源大规模并行处理(MPP)数据库Greenplum,其架构是针对大型分析型数据仓库和商业智能工作负载专门设计的。借助MPP这种高性能的系统架构,Greenplum可以将TB级的数据仓库负载分解,并使用所有的系统资源并行处理单个查询。

Greenplum数据库基于PostgreSQL开源技术。本质上讲,它是多个PostgreSQL实例一起充当一个数据库管理系统。Greenplum以PostgreSQL 8.2.15为基础构建,在SQL支持、特性、配置选项和终端用户功能方面非常像PostgreSQL,用户操作Greenplum就跟平常操作PostgreSQL一样。不过,为了支持Greenplum数据库的并发结构,PostgreSQL的内部构件经过了修补。例如,为了在所有并行的PostgreSQL数据实例上并发执行查询,系统目录、优化器、查询执行器以及事务管理器组件都经过了修改和增强。此外,Greenplum还引入了针对商业智能工作负载优化PostgreSQL的特性。例如,增加了并行数据加载、资源管理、查询优化、存储增强。这些功能是标准PostgreSQL所不具备的。

根据Pivotal的开源公告,他们希望Greenplum会成为一个重大的里程碑,永久改变数据仓库这个行业。Greenplum数据库与其它开源数据处理系统(如Apache Hadoop、MySQL甚或PostgreSQL)的差别在架构和功能上都有体现。借助MPP,Greenplum在大型数据集上执行复杂SQL分析的速度比他们测试过的任何一个方案都要快。而借助 下一代查询优化技术,Greenplum带来了其它开源方案中没有的数据管理质量特性、升级和扩展能力。他们相信,这样一款经过证明的、广泛采用的数据仓库开源将会在整个业界引发巨大的连锁反应。最重要的是,这降低了大规模实时数据分析的门槛,更多的公司可以参与到大数据所带来的挑战中来。

另据 InfoWorld报道,数据库行业分析师Curt Monash 将Greenplum视为分析型RDBMS的真正竞争者。而且,相比现有的产品(如 TeradataHP VerticaIBM NetezzaOracle Exadata),其引入成本更低。Greenplum作为一项服务似乎是个再简单不过的选择。它有一个为人熟知的名字和广泛的用户基础。MySQL或PostgreSQL也通过类似的技术提供云端服务。但是,Greenplum真要展现出其优势,需要做好两个方面的工作:一是从现有的Greenplum部署移植要简单;二是有一个可行的发展路线,要么可以通过其它云托管产品富集数据,要么集成新兴的分析技术,如Spark。

Greenplum 的架构 

Greenplum的高性能得益于其良好的体系结构。Greenplum的架构采用了MPP(大规模并行处理)。在 MPP 系统中,每个 SMP 节点也可以运行自己的操作系统、数据库等。换言之,每个节点内的 CPU 不能访问另一个节点的内存。节点之间的信息交互是通过节点互联网络实现的,这个过程一般称为数据重分配 (Data Redistribution) 。与传统的SMP架构明显不同,通常情况下,MPP系统因为要在不同处理单元之间传送信息,所以它的效率要比SMP要差一点,但是这也不是绝对的,因为MPP系统不共享资源,因此对它而言,资源比SMP要多,当需要处理的事务达到一定规模时,MPP的效率要比SMP好。这就是看通信时间占用计算时间的比例而定,如果通信时间比较多,那MPP系统就不占优势了,相反,如果通信时间比较少,那MPP系统可以充分发挥资源的优势,达到高效率。当前使用的OTLP程序中,用户访问一个中心数据库,如果采用SMP系统结构,它的效率要比采用MPP结构要快得多。而MPP系统在决策支持和数据挖掘方面显示了优势,可以这样说,如果操作相互之间没有什么关系,处理单元之间需要进行的通信比较少,那采用MPP系统就要好,相反就不合适了。

常见的OLTP数据库系统常常采用shared everything架构来做集群,例如oracle RAC架构,数据存储共享,节点间内存可以相互访问。

rac

Greenplum是一种基于postgresql(开源数据库)的分布式数据库。与Oracle RAC的Shared Everything架构不同,Greenplum采用Shared Nothing架构。整个集群由很多个数据节点(Segment Host)和控制节点(Master Host)组成,其中每个数据节点上可以运行多个数据库。

简单来说,Shared Nothing是一个分布式的架构,每个节点相对独立。典型的Shared Nothing系统会集数据库、内存Cache、等存储状态的信息;而不在节点上保存状态的信息。主机,操作系统,内存,存储都是自我控制的,不存在共享。

对于应对大规模数据处理的服务器集群设备,若将Session状态信息保存在各个数据节点上,各节点的Session复制会极大的影响性能;若采用 Shared Nothing,保持每个节点的无状态性,不再使用Session来保持全局的状态,而是将Session直接放在数据库中,在数据库前再加一层如 Memcached分布式Cache,这样将可极大的提高性能,当改变Session中的对象时,将同步到Cache和数据库。基于Shared Nothing的分布式架构模式,Greenplum在高效处理I/O数据吞吐和并发计算的过程就很好理解。

Greenplum主要由master host,segment host,interconnect三大部分组成。

Greenplum

Greenplum master是Greenplum数据库系统的入口,接受客户端连接及提交的SQL语句,将工作负载分发给其它数据库实例(segment实例),由它们存储和处理数据。Greenplum interconnect负责不同PostgreSQL实例之间的通信。Greenplum segment是独立的PostgreSQL数据库,每个segment存储一部分数据。大部分查询处理都由segment完成。

了解完Greenplum的架构后,对其工作流程也就相对简单了。因greenplum采用了MPP架构,其主要的优点是大规模的并行处理能力,应该把精力主要放在大规模存储与并行处理两个方面。

大规模存储

Greenplum数据库通过将数据分布到多个节点上来实现规模数据的存储。数据库的瓶颈经常发生在I/O方面,数据库的诸多性能问题最终总能归罪到I/O身上,久而久之,IO瓶颈成为了数据库性能的永恒的话题。Greenplum采用分而治之的办法,将数据规律的分布到节点上,充分利用segment主机的IO能力,以此让系统达到最大的IO能力(主要是带宽)。

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

greenplum-data

高效I/O的实现

I/O瓶颈是数据库,特别是大规模数据分析处理中永恒的话题。在Greenplum中,需要存储的数据在进入进入数据库时,将首先进行数据分布的处理工作;将一个表里的数据平均分布到每个节点,并为每个表指定一个分发列(distribute Column),之后便根据Hash来分布数据。

greenplum-io

基于Shared Nothing的原则,Greenplum这样处理可以充分发挥每个节点处I/O的处理能力。在这一过程中,控制节点(Master Host)将不再承担计算任务,而只负责必要的逻辑控制和客户端交互。这是Greenplum的独到之处。在多数集群的大规模数据处理系统中,都使用中心节点进行大量的控制和计算,大量的数据交换过程中将造成中心节点 的负载过大;多数情况下,数据库的I/O瓶颈在这一位置(处理过程)形成病灶,进而随多核心CPU时序控制和处理响应的时段等问题开始蔓延,最终致使系统 中很多节点的I/O位置病入膏肓。在Greenplum中,控制节点只负责必要的逻辑处理和客户端交互,节点间的数据交互将直接在节点间完成,而不需要控制节点;在一定的硬件资源支持下,高效I/O不再是DBA的梦想。

并行处理

I/O瓶颈的解决为并行计算能力的提升创造了良好的环境。下面我们一起来看看Greenplum是如何进行高性能的并行计算的。

  • 在硬件方面,Greenplum可以使用标准的服务器并通过服务器间的高级通信连接,将多台服务器组成一个强大的计算平台,实现快速的海量并行运算。
  • 在系统内部,Greenplum通过自己的并行数据流引擎来实现更多计算需求的硬件资源调度。一般,多表JOIN操作是考验系统并行计算能力的经典 案例。在Greenplum中,这一过程是将一个表里的数据平均分布到每个节点,并为每个表指定一个分发列,之后便根据Hash算法来分布数据。

这样,每个节点的数据通过分发列即得知。如果对distribute Column做JOIN操作,只需要通过分发列得到数据的节点位置,并对相应的节点进行计算,最后合并结果就可完成。当然,这种几个表规模的查询还不能证明Greenplum在并行计算方面的能力。但重要的是,通过Greenplum的并行数据流引擎,我们可以在一个主机上同时启动多个PostgreSQL数据库进行更多表的关联及更复杂的查询操作。这就充分发挥了硬件资源的性能。

greenplum-2

在进行数据装载时,不是常规的一个中心数据源将数据分发至各节点,而是所有节点同时读取数据,然后根据Hash算法,将属于自己的数据留下,将其他的节点的数据通过网络直接传送给需求方。这种多数据流的并行传输保证了高性能的数据装载速度。

在进行并发数据分析时,Greenplum的另一个强大之处是支持对一个Segment节点的虚拟化,在载入数据后,我们可以对数据节点虚拟多个数 据库进行并行分析操作,依旧源于Share nothing架构,Greenplum的一个Segment可支持2-10个虚拟数据库(官方推荐为6个),可以最大限度发挥硬件设备,提高并行规模和查询分析效率。

Greenplum的并行处理主要体现在外部表并行装载,并行备份恢复与并行查询处理三个方面。数据仓库的主要精力一般集中在数据的装载和查询,数据的并行装载主要是在采用外部表或者web表方式,通常情况下通过gpfdist来实现。

greenplum-3

Gpfdist程序能够以370MB/s装载text格式的文件和200MB/s装载CSV格式文件,ETL带宽为1GB的情况下,我们可以运行3个gpfdist程序装载text文件,或者运行5个gpfdist程序装载CSV格式文件。例如图例中采用了2个gpfdist程序进行数据装载。可以根据实际的环境通过配置postgresql.conf参数文件来优化装载性能。

查询性能的强弱往往由查询优化器的水平来决定,greenplum主节点负责解析SQL与生成执行计划。Greenplum的执行计划生成同样采用基于成本的方式,基于数据库是由诸多segment实例组成,在选择执行计划时主节点还要综合考虑节点间传送数据的代价。

工作原理:

在主节点上存在query dispatcher (QD)进程,该进程前期负责查询计划的创建和调度,segment instance返回结果后,该进程再进行聚合与向用户展示;segment host存在query executor (QE)进程,该进程负责其它节点相互通信与执行QD调度的执行计划。

greenplum-4

Greenplum最为一个严格的数据库系统,同样支持线性扩展,高可用性架构,数据与主机的容错机制,还有数据的分区与压缩功能。

参考链接:

相关 [postgresql 开源 分布] 推荐:

基于PostgreSQL的开源分布式数据库:Greenplum

- - 标点符
Pivotal宣布开源大规模并行处理(MPP)数据库Greenplum,其架构是针对大型分析型数据仓库和商业智能工作负载专门设计的. 借助MPP这种高性能的系统架构,Greenplum可以将TB级的数据仓库负载分解,并使用所有的系统资源并行处理单个查询. Greenplum数据库基于PostgreSQL开源技术.

Postgres-XL:基于PostgreSQL的开源分布式实现

- - 标点符
Postgres-XL 全称为 Postgres eXtensible Lattice,是TransLattice公司及其收购数据库技术公司–StormDB的产品. Postgres-XL是一个横向扩展的开源数据库集群,具有足够的灵活性来处理不同的数据库任务. Postgres-XL 功能特性. 开放源代码:(源协议使用宽松的“ Mozilla Public License”许可,允许将开源代码与闭源代码混在一起使用.

CitusDB发布提高PostgreSQL数据库性能的开源工具

- - TechCrunch 中国
数据库分析初创公司CitusDB今天发布CSTORE,一款针对PostgreSQL的纵列储存插件,试图抢占甲骨文的奶酪. 这款开源工具是该公司面向PostgreSQL的第一款工具,从今天开始就可以免费下载. “在批量加载数据的分析工作中,使用纵列储存的优势非常明显,”CitusDB在其 官方博客中这么写道,暗示用户使用这款工具可以达到更好的数据库性能.

Pivotal开源基于PostgreSQL的数据库Greenplum

- - 博客园_新闻
近日,Pivotal 宣布开源大规模并行处理(MPP)数据库 Greenplum,其架构是针对大型分析型数据仓库和商业智能工作负载专门设计的. 借助 MPP 这种高性能的系统架构,Greenplum 可以将 TB 级的数据仓库负载分解,并使用所有的系统资源并行处理单个查询. Greenplum 数据库基于 PostgreSQL 开源技术.

腾讯基于 PostgreSQL 历时 8 年研发的 HTAP 分布式数据库 TBase 开源了,对数据库有兴趣的同学可以去了解体验一下

- - V2EX - 技术
github 地址: https://github.com/Tencent/TBase.

PostgreSQL 9.1发布

- Kai Chen - Solidot
开源数据库项目PostgreSQL发布了v9.1版. 新版本主要的特性包括:同步复制,序列化快照隔离,支持基于列的排序,近邻邻近索引,外来数据封装,支持SELinux许可控制,等等.

PostgreSQL 9.2发布

- - Solidot
时隔一年之后,开源数据库PostgreSQL发布了v9.2版. 主要新特性包括:原生JSON支持,覆盖索引(covering indexes),改进复制和性能等. PostgreSQL显著改善了可伸缩性:线性可扩展性支持最高64核,仅扫描索引,减少CPU消耗;改进垂直可伸缩性:有效利用大服务器硬件资源,锁管理,仅访问索引等底层操作允许数据库引擎处理更大的工作负荷——每秒最高35万只读查询,每秒写入1.4万条数据.

Mysql 和 Postgresql 对比

- - 膘叔
vampire告诉我服务器上安装好了postgreSQL,他也一直在推荐这个玩意,所以了解了一下. Mysql 使用太广泛了,以至于我不得不将一些应用从mysql 迁移到postgresql, 很多开源软件都是以Mysql 作为数据库标准,并且以Mysql 作为抽象基础的,但是具体使用过程中,发现Mysql 有很多问题,所以都迁移到postgresql上了,转一个Mysql 和Postgresql 对比的文章:.

PostgreSQL与MySQL比较

- - 数据库 - ITeye博客
通过执行 MySQL 命令(mysqld)启动实例. 一个实例可以管理一个或多个数据库. 一台服务器可以运行多个 mysqld 实例. 一个实例管理器可以监视 mysqld 的各个实例. 通过执行 Postmaster 进程(pg_ctl)启动实例. 一个实例可以管理一个或多个数据库,这些数据库组成一个集群.

PostgreSQL新手入门

- - 阮一峰的网络日志
自从MySQL被Oracle收购以后, PostgreSQL逐渐成为开源关系型数据库的首选. 本文介绍PostgreSQL的安装和基本用法,供初次使用者上手. 以下内容基于Debian操作系统,其他操作系统实在没有精力兼顾,但是大部分内容应该普遍适用. 首先,安装PostgreSQL客户端. 然后,安装PostgreSQL服务器.