Greenplum
是一个纯软件的MPP
数据库服务器,其系统架构专门用于管理大规模分析型数据仓库或商业智能工作负载。从技术上讲,MPP
无共享架构是指具有多个节点的系统,每个节点都有自己的内存、操作系统和磁盘,它们协作执行一项操作。Greenplum
使用这种高性能系统架构分配PB
级别的数据,并行使用系统的所有资源来处理请求。
Greenplum 与 PostgreSQL
Greenplum 6 版本基于PostgreSQL 9.4 开源数据库,本质上是若干面向磁盘的PostgreSQL 数据库实例,共同作为一个内聚的数据库管理系统(DBMS )。大多数情况下,Greenplum 在SQL 支持、配置选项和最终用户功能方面与PostgreSQL 非常相似。用户操作Greenplum 数据库就像与常规PostgreSQL 交互一样。
Greenplum 与PostgreSQL 的主要区别为:
l 除了支持Postgres 优化器外,还有自己的GPORCA 优化器。
l Greenplum 数据库可以使用Append-Optimized 存储格式。
l Greenplum 支持列存储,即逻辑上组织为表的数据,物理上以面向列的格式存储数据。列存储只能与Append-Optimized 表一起使用。
Greenplum 对PostgreSQL 的内部结构进行了修改和补充,以支持数据库的并行结构。例如,对系统目录、优化器、查询执行器和事务管理器组件做过修改和增强,能够在所有并行PostgreSQL 数据库实例上同时运行查询。Greenplum 依赖Interconnect (内部互连)在网络层支持不同PostgreSQL 实例之间的通信,使得系统作为单一逻辑数据库运行。
较之标准PostgreSQL ,Greenplum 还增加了并行数据装载(外部表)、资源管理、查询优化和存储增强功能。Greenplum 开发的许多功能和优化也进入了PostgreSQL 社区,促进了PostgreSQL 的发展。例如,表分区是Greenplum 首先开发的一个特性,现在已成为标准PostgreSQL 的一部分。
Greenplum 顶层系统架构如图3-1 所示。Master 是Greenplum 数据库系统的入口,是客户端连接并提交SQL 语句的数据库实例。Master 将其工作与系统中其他叫作Segment 的数据库实例进行协调,这些数据库实例负责实际存储和处理用户数据。每个Master 和Segment 都是一个PostgreSQL 数据库实例。
Master
Master
是Greenplum
的系统入口,它接收客户端连接和SQL
查询,并将工作分配给Segment
实例。最终用户通过Master
与Greenplum
数据库交互,就像与典型PostgreSQL
数据库交互一样。用户可以使用诸如psql
之类的客户端程序或JDBC
、ODBC
、libpq
之类的应用程序编程接口(API
)连接到数据库。
Master 数据库实例中存储全局系统目录(Global System Catalog )。全局系统目录是一组系统表,其中包含关于Greenplum 本身的元数据。Master 实例中不包含任何用户数据,用户数据仅驻留在Segment 实例中。Master 验证客户端连接,处理传入的SQL 命令,在Segment 之间分配工作负载,协调每个Segment 返回的结果,并将最终结果返给客户端程序。
Greenplum 数据库使用写前日志(WAL )进行主/ 备Master 镜像。在基于WAL 的日志记录中,所有修改都会在应用之前写入日志,以确保任何进程内操作的数据完整性。
Greenplum 的Segment 实例是独立的PostgreSQL 数据库,每个数据库存储一部分数据并执行一部分查询处理。当用户通过Master 连接到数据库并发出查询时,将在每个Segment 数据库中创建进程以处理该查询的工作。有关查询过程的更多信息,参见3.3.3 节。
用户定义的表及其索引分布在所有可用的Segment 中,每个Segment 都包含互斥的部分数据(复制表除外,这种表会在每个
Segment
Segment 实例上存储一份完整的数据拷贝)。提供服务的数据库服务器进程在相应的Segment 实例下运行。
Segment 在称为段主机的服务器上运行。一台段主机通常运行2~8 个Segment 实例,具体数量取决于CPU 核、内存、磁盘、网卡和工作负载。所有段主机的配置应该相同,以避免木桶效应。让Greenplum 获得最+佳性能的关键是将数据和负载均匀分布到多个能力相同的Segment 上,以便所有Segment 同时处理任务并同时完成其工作。
Interconnect
Interconnect 即内部互连,是Greenplum 数据库系统架构中的核心组件,互连指的是Segment 在网络间的进程间通信。Interconnect 使用标准以太网交换数据,出于性能原因,建议使用万兆网或更快的系统。
默认情况下,Interconnect 使用带有流量控制的用户数据报协议(UDPIFC )进行通信,通过网络发送消息。Greenplum 软件执行超出UDP 提供的数据包验证,这意味着其可靠性相当于传输控制协议(TCP ),性能和可扩展性超过TCP 。如果将Interconnect 改为TCP ,Greenplum 数据库的可扩展性则限制为1000 个Segment 实例,UDPIFC 作为Interconnect 的默认协议不受此限制。
Interconnect 实现了对同一集群中多个PostgreSQL 实例的高效协同和并行计算,承载了并行查询计划生产、查询分派(QD )、协调节点上查询执行器(QE )的并行工作、数据分布、Pipeline 计算、镜像复制、健康探测等诸多任务。
本文节选自《 Greenplum 构建实时数据仓库实践》,内容发布获得作者和出版社授权。
