Greenplum 数据库是最先进的分布式开源数据库技术,主要用来处理大规模的数据分析任务,包括数据仓库、商务智能(OLAP)和数据挖掘等。自2015年10月正式开源以来,受到国内外业内人士的广泛关注。本文就社区关心的Greenplum数据库技术架构进行介绍。
一. Greenplum数据库简介
大数据是个炙手可热的词,各行各业都在谈。一谈到大数据,好多人认为就是Hadoop。实际上Hadoop只是大数据若干处理方案中的一个。现在的SQL、NoSQL、NewSQL、Hadoop等等,都能在不同层面或不同应用上处理大数据的某些问题。而Greenplum数据库做为一个分布式大规模并行处理数据库,在大多数情况下,更适合做大数据的存储引擎、计算引擎和分析引擎。
Greenplum数据库也简称GPDB。它拥有丰富的特性:
第一,完善的标准支持:GPDB完全支持ANSI SQL 2008标准和SQL OLAP 2003 扩展;从应用编程接口上讲,它支持ODBC和JDBC。完善的标准支持使得系统开发、维护和管理都大为方便。而现在的 NoSQL,NewSQL和Hadoop 对 SQL 的支持都不完善,不同的系统需要单独开发和管理,且移植性不好。
第二,支持分布式事务,支持ACID。保证数据的强一致性。
第三,做为分布式数据库,拥有良好的线性扩展能力。在国内外用户生产环境中,具有上百个物理节点的GPDB集群都有很多案例。
第四,GPDB是企业级数据库产品,全球有上千个集群在不同客户的生产环境运行。这些集群为全球很多大的金融、政府、物流、零售等公司的关键业务提供服务。
第五,GPDB是Greenplum(现在的Pivotal)公司十多年研发投入的结果。GPDB基于PostgreSQL 8.2,PostgreSQL 8.2有大约80万行源代码,而GPDB现在有130万行源码。相比PostgreSQL 8.2,增加了约50万行的源代码。
第六,Greenplum有很多合作伙伴,GPDB有完善的生态系统,可以与很多企业级产品集成,譬如SAS,Cognos,Informatic,Tableau等;也可以很多种开源软件集成,譬如Pentaho,Talend 等。
二. Greenplum架构
2.1 平台架构
图(1)是Greenplum数据库平台概括图。平台分为四个层次,我们依次从下往上看。
MPP核心架构
服务层
产品特性
客户端访问和工具
通过psql命令行工具可以访问GPDB数据库的所有功能,此外还提供了ODBC、JDBC、OLEDB、libpq等应用编程接口。
数据库或者数据集群的管理工具非常重要,GPDB提供了图形化的管理工具GPCC(Greenplum Command Center),帮你管理状态,监控资源使用情况。
Greenplum Workload Manager是刚刚发布的新产品,用以实现基于规则的资源管理。它支持自定义规则,当某个SQL满足规则描述的条件时会执行某些操作。比如你可以定义规则自动取消消耗CPU资源达50%以上的查询。
2.2 大规模并行处理(MPP)无共享架构
MPP 是Greenplum数据库最突出的特色。现在很流行MPP这个词,我们可以看一下它是什么意思。下边图(2)中,主节点有两个,一个是主节点,一个是从主节点。通过软交换机制,也就是通过高速网络,主节点连到数据节点。每个数据节点有自己的CPU,自己的内存,自己的硬盘,他们唯一共享的就是网络。这也是称为无共享架构的原因。这种架构的好处是集群是分布式的环境,数据可以分布在很多节点上进行并行处理,可以做到线性扩展。
在分布式数据库中,性能好坏的最重要因素是数据分布是否均匀。如果数据分布不均匀,有的节点上数据非常多,有的节点数据很少,这样会出现短板效应,整个SQL的效率不会很好。Greenplum支持多种数据分布的策略,默认使用主键或者第一个字段进行哈希分布,还支持随机分布。除了横向上数据可以按节点分布之外,在某个节点上还可以对数据进行分区。分区的规则比较灵活,可以按照范围分区,也可以按照列表值分区,如图(3)。
2.3 并行查询计划和执行
下面是个简单的SQL,如图(4),从两张表中找到2008年的销售数据。图中右边是这个SQL的查询计划。从生成的查询计划树中看到有三种不同的颜色,颜色相同表示做同一件事情,我们称之为分片/切片(Slice)。最下层的橙色切片中有一个重分发节点,这个节点将本节点的数据重新分发到其他节点上。中间绿色切片表示分布式数据关联(HashJoin)。最上面切片负责将各个数据节点收到的数据进行汇总。
然后看看这个查询计划的执行,如图(5)。主节点(Master)上的调度器(QD)会下发查询任务到每个数据节点,数据节点收到任务后(查询计划树),创建工作进程(QE)执行任务。如果需要跨节点数据交换(例如上面的HashJoin),则数据节点上会创建多个工作进程协调执行任务。不同节点上执行同一任务(查询计划中的切片)的进程组成一个团伙(Gang)。数据从下往上流动,最终Master返回给客户端。
2.4 多态存储
上面介绍了GPDB的特点和SQL执行计划以及执行过程,那数据在每个节点上到底怎么样存储?
Greenplum提供称为“多态存储”的灵活存储方式。多态存储可以根据数据热度或者访问模式的不同而使用不同的存储方式。一张表的不同数据可以使用不同的物理存储方式,如图(6)。支持的存储方式包含:
2.5 大规模并行数据加载
作为一个数据库,一定会保存和处理数据。那数据来源于什么地方?Oracle这样的数据库里面的数据多是客户生成的,譬如你银行转账、淘宝订单等。对于数据分析型的数据库,其源数据通常是在其他系统中,而且数据量很大。这样数据加载的能力就变得非常重要。Greenplum提供了非常好的数据加载方案,支持高速的加载各种数据源的不同数据格式的数据,如图(7)。
三. Greenplum核心组件
Greenplum 数据库包括以下核心组件:
四、Greenplum开源
2015年3月份,Pivotal宣布了Greenplum的开源计划,经过6个月紧锣密鼓的工作,于10月27号正式开源。官方网站为http://greenplum.org。许可证书使用Apache 2许可证。
Greenplum 开源社区提供了运行环境沙盒以及使用教程,里面包含了Greenplum数据库的一些主要特性。从https://github.com/greenplum-db/gpdb-sandbox-tutorials可以下载沙盒和教程。
有关Greenplum数据库使用和开发的任何问题都可以去邮件列表讨论:邮件列表有两个:[email protected] 和[email protected]。
源代码位于https://github.com/greenplum-db/gpdb,开源不到两个月就有1187个收藏,256个fork,超过150个pull request,其中136个pull request 已经关闭。贡献者中除了包含Pivotal的员工外,还有来自全球(包括中国、美国、日本和欧洲)的社区开发人员。关于从源代码编译和安装Greenplum数据库,可以参考:http://gpdb.rocks/gpdb/2015/10/29/how-to-build-gpdb.html
作者简介:姚延栋 Pivotal研发总监,2005年毕业于中科院软件所。曾在Sun Microsystems、Symantec工作多年,2010年加入Greenplum(现在的Pivotal),负责中国研发团队。