Greenplum介绍

0    251    1

Tags:

👉 本文共约22204个字,系统预计阅读时间或需84分钟。

简介

Greenplum是一款开源的大数据分析平台,由Pivotal Software公司开发(现在是VMware的一部分)。它使用开源的PostgreSQL作为其基础,采用MPP架构(Massive Parallel Processing,海量并行处理)开发,具有分布式数据库的特性,可以扩展到数百个节点。Greenplum支持SQL和PL/pgSQL,以及许多其他编程语言,包括Java和Python等。

Greenplum 是全球领先的开源、多云大数据分析平台,被广泛运用于大规模商业智能和分析中,具有极高的稳定性。随着2019年6版本的发布,其 OLTP 性能大幅提升,成为了一款真正的 HTAP 数据库。

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

Greenplum数据库是基于PostgreSQL开源技术的。它本质上是多个PostgreSQL面向磁盘的数据库实例一起工作形成的一个紧密结合的数据库管理系统(DBMS)。 GP 6.0版本基于PostgreSQL 9.4开发,其SQL支持、特性、配置选项和最终用户功能在大部分情况下和PostgreSQL非常相似。 与Greenplum数据库交互的数据库用户会感觉在使用一个常规的PostgreSQL DBMS。

GPDB和PG的区别

Greenplum数据库和PostgreSQL的主要区别在于:

  • 在基于Postgres查询规划器的常规查询规划器之外,可以利用GPORCA进行查询规划。
  • Greenplum数据库可以使用追加优化的存储。
  • Greenplum数据库可以选用列式存储,数据在逻辑上还是组织成一个表,但其中的行和列在物理上是存储在一种面向列的格式中,而不是存储成行。 列式存储只能和追加优化表一起使用。列式存储是可压缩的。当用户只需要返回感兴趣的列时,列式存储可以提供更好的性能。 所有的压缩算法都可以用在行式或者列式存储的表上,但是行程编码(RLE)压缩只能用于列式存储的表。Greenplum数据库在所有使用列式存储的追加优化表上都提供了压缩。

文档

文档:http://docs-cn.greenplum.org/v6/admin_guide/intro/arch_overview.html

https://www.bookstack.cn/read/greenplum-admin_guide-6.0-zh/9ccd913ea8be24b9.md

github:https://github.com/greenplum-db/gpdb/releases

历史

以下是Greenplum数据库的主要版本发布历史:

除此之外,Greenplum还有一些更新和维护版本,包括Greenplum 4.2.7.1、Greenplum 4.3.12.1等,这些版本都是基于先前版本的修改和改进,以提高性能和可用性。

Greenplum 数据库的特点

Greenplum具有以下特点:

  1. 并行化:Greenplum通过将数据分散在多个节点上,以及通过分区和并行执行查询等技术来实现高效的数据处理和分析。
  2. 扩展性:Greenplum可以通过增加节点数量来扩展其容量和性能,同时也支持动态负载平衡。
  3. 安全性:Greenplum提供了丰富的安全功能,包括数据加密、用户认证、访问控制和审计等。
  4. 多样化的数据类型和格式:Greenplum支持多种数据类型和格式,包括结构化数据、半结构化数据和非结构化数据等。
  5. 分析能力:Greenplum支持各种数据分析和机器学习技术,包括基于SQL的查询和聚合、基于Python的自定义函数和外部表等。

Greenplum可以在企业内部部署,也可以在云环境中使用。它被广泛应用于各种场景,包括数据仓库、商业智能、金融分析、物联网和机器学习等领域。

本节简单介绍 Greenplum 具备的特性。

  1. 开放源代码
    Greenplum 数据库于 2015 年由 Pivotal 公司开源,遵循 Apache Licence 2.0 协议,官方网站为 http://greenplum.org。代码托管在 GitHub 上,链接为 https://github.com/greenplum-db/gpdb 。开放源码一方面可以为数据库用户和开发人员提供 Greenplum 数据库源码级的实现参考,另一方面可以吸引更多的数据库开发者参与到 Greenplum 社区维护中。
  2. 高扩展性
    Greenplum 数据库采用大规模无共享架构,将多台服务器组装成强大的计算平台,实现高效的海量并行运算。Greenplum 数据库可以支持 1000 个以上的集群,管理的数据规模从 TB 级到 PB 级,可以满足多数企业的数据处理需求。
  3. 高查询性能
    Greenplum 的高性能不仅来自高效的并行处理框架,还有查询引擎的优化。Greenplum数据库除了支持基于 PostgreSQL 的查询优化之外,还专门开发了一个新的查询优化器ORCA。ORCA 是一款自顶向下的基于 Cascades 框架的查询优化器,目前已经成为企业版Greenplum 数据库的默认优化器。相比基于 PostgreSQL 的查询优化器,ORCA 查询优化器能使部分查询的性能提升 10 ~ 1000 倍。
  4. 高可用
    Greenplum 提供多级容错机制,确保整个系统的高可用性。Master 节点通过 Standby Master 节点进行备份,每个数据节点的 Primary Segment 实例分别配置一个 Mirror Segment
    实例作为备份,同时确保同一组 Primary Segment 实例和 Mirror Segment 实例不在同一物理机上,从而降低因为宕机而导致数据丢失的风险。
  5. 高效资源管理
    Greenplum 提供了高效的资源管理机制,根据用户的业务逻辑将资源合理地分配给查询任务,避免查询任务因查询资源不足而得不到响应。Greenplum 资源管理主要包括对并发
    查询数量的限制,查询执行时内存、CPU 资源使用的限制等。Greenplum 数据库提供了资源队列(Resource Queue)和资源组(Resource Group)两种资源管理方式,一般使用场景下
    采用默认配置即可。
  6. 多态存储
    用户可以根据数据热度或者访问模式的不同使用不同的存储方式,以获得更好的查询性能。用户可以为一张表按照一定的规则(比如日期、月份)创建分区表,一张表的各个子分区表可以使用不同的物理存储方式。支持的存储方式包括:行存储,数据以行的形式存储在数据页里,适合频繁更新的查询;列存储,数据以列的形式存储在数据页里,适合OLAP 分析型查询;外部表,数据保存在其他文件系中,如 HDFS、S3,数据库只保留元数据信息。
  7. 生态完整
    Greenplum 数据库拥有完善的 SQL 标准支持,包括 SQL92、SQL99、SQL2003 以及OLAP 扩展,是对 SQL 标准支持最好的开源商用数据库系统之一。同时,由于 Greenplum数据库基于 PostgreSQL,因此也继承了 PostgreSQL 对于 JDBC、ODBC、C、Python API等接口的支持。
  8. 高效数据加载
    Greenplum 还有一个非常神奇的功能—GPload 并行加载数据,即允许数据从多个文件系统通过多个主机上的多个网卡加载数据,从而达到非常高的数据传输率。笔者曾经在3 个节点的集群上并行加载 50GB、2 亿行记录的数据,仅用时 90s。此外,Greenplum 数据库可以读取和写入多种类型的外部数据源,包括文本文件、XML 文件、S3 平台文件、Gemfire、Web 服务器以及 Hadoop 生态系统中的 HDFS、Hive、HBase、Kafka、Spark 等,同时支持数据压缩以及字符集间的自动转换。
  9. 高级数据分析功能
    Greenplum 数据库支持各种过程化编程语言,包括 PL/PostgreSQL、PL/R、PL/Python、PL/Java、PL/Perl 等语言扩展。在高级数据分析方面,通过 Greenplum 数据库的 MADlib 扩展模块,用户可以很方便地利用 MPP 架构完成大规模并行分析。
  10. 良好的监控管理和运维体验
    Greenplum 数据库提供基于 Web 的可视化工具—Greenplum Command Center(简称GPCC)。GPCC 可以监控 Greenplum 数据库系统的性能、集群健康状态、查询执行及系统资源使用情况,如图 2-4 所示。

Greenplum 的优势

首先,与传统数据库相比,Greenplum 作为分布式数据库,本身具有高性能优势。对各行各业来说,OLTP 系统最重要的是在保证 ACID 事务管理属性的前提下满足业务的并发需求,对于大多数非核心应用场景,MySQL、SQL Server、DB2、Oracle 都可以满足系统要求,并且随着 MySQL 性能的优化和云原生数据库的发展,基于 MySQL 或者 PostgreSQL 商业化的数据库会越来越普及。数据中台的定位是一个 OLAP 系统,上述数据库就很难满足海量数据并发查询的要求了。上述数据库的横向扩展能力有限,并且软硬件成本高昂,不适合作为 OLAP 系统的数据库。Greenplum 作为一款基于 MPP 架构的数据库,具有开源、易于扩展、高查询性能的特点,性价比碾压 DB2、Oracle、Teradata 等传统数据库。

其次,Greenplum 作为分布式数据库,和同为分布式数据库的 Hive 相比,优势也非常明显。早期 Hadoop 的无模式数据已经让开发者饱受痛苦,后面兴起的 Hive、Presto、Spark SQL 虽然支持简单的 SQL,但是查询性能仍然是分钟级别的,很难满足 OLAP 的实时分析需求。后期虽有 Impala+Kudu,但是查询性能仍然弱于同为 MPP 架构的 Greenplum。除此之外,Hadoop 生态圈非常复杂,安装和维护的工作量都很大,没有专业的运维团队很难支撑系统运行。而 Greenplum 支持的 SQL 标准最全面,查询性能在毫秒级,不仅能很好地支持数据 ETL 处理和 OLAP 查询,还支持增删改等操作,是一款综合实力非常强的数据库。相对于 Hadoop 多个组件组成的庞大系统,Greenplum 数据库在易用性、可靠性、稳定性、开发效率等方面都有非常明显的优势。

最后,Greenplum 作为 MPP 数据库中的一员,相对于其他 MPP 架构数据库,也具有非常明显的优势。Greenplum 研发历史长、应用范围广、开源稳定、生态系统完善。生态系统完善是指 Greenplum 的工具箱非常多:GPload 可满足高速加载需求,PXF 可满足外置表

和文件存储需求,MADlib 可满足数据挖掘需求,GPCC 可满足系统监控运维需求。相对于TiDB、TBase、GaussDB 等新兴数据库来说,Greenplum 的应用案例最多,生态系统最完善,并且 Bug 更少。同时,TiDB、TBase、GaussDB 等数据库都定位于优先满足 OLTP 的同时提高 OLAP 的性能,而 Greenplum 是以 OLAP 优先的。虽然前者也有优势,但是将 OLAP和 OLTP 合并实现起来存在以下困难:数据分布在不同的系统已经是行业现实,没有办法将数据集中到同一个数据库;数据中台天然就是一个 OLAP 系统,没有办法按照 OLTP 模式设计。综上,作为分布式关系型数据库,Greenplum 是搭建数据中台的首选数据库。

图 2-5 是阿里巴巴大数据平台进化历程。2010 年前后,阿里巴巴曾经使用 Greenplum来替换 Oracle 集群,将其作为数据分析平台。从数量上说,Greenplum 在 2010 年实现了 Oracle 10 倍数据量的管理,即 1000TB。但 Oracle 的架构这些年没有太大变化,而Greenplum 数据库已有翻天覆地的革新。在阿里巴巴应用的时代,Greenplum 还是 EMC 旗下的商用数据库,平台尚在发育期,功能也不太完善。而如今的 Greenplum 已经是社区开源的产品,内核 PostgreSQL 也已完成了多个版本的升级迭代,现在更是轻轻松松支持上千台服务器的集群,因此承载 PB 级的数据自不在话下。

对于大多数有构建数据中台需求的企业,1000TB 已经是一个无法企及的高度。大多数据企业的数据都在数 TB 到 100TB 的范围内,这个规模的数据正是 Greenplum 的主要战场。100TB 以下规模的数据仓库或者数据中台,Hive 发挥不了架构上的优势,反而影响开发速度和运维工作,实在是得不偿失。
在查询性能方面,Greenplum 自然不是第一,虽然业界尚无定论,但是据笔者了解,目前 ClickHouse 是当之无愧的 OLAP 冠军。相对于 ClickHouse,Greenplum 胜在高性能的GPload 插件、强大的 ETL 功能、不算太弱的增删改性能。目前,数据中台在稳步向实时流处理迈进,由于不擅长单条更新和删除,因此 ClickHouse 只适合执行离线数据查询任务,可以作为超大规模数据中台的 OLAP 查询引擎。

综上所述,虽然 Greenplum 某些方面不是最优秀的,但仍是最适合搭建数据中台的分布式数据平台,并且以 Greenplum 现有的性能和管理的数据规模,可以满足绝大多数中小企业的数据中台需求。

内核版本

GPDB 4.3.1 PostgreSQL 8.2

GPDB 5.9.0 PostgreSQL 8.3.23

GPDB 6.13.0 PostgreSQL 9.4.24

GPDB 6.23.0 PostgreSQL 9.4.26

GPDB 6.25.0 PostgreSQL 9.4.26

GPDB 6.25.3 PostgreSQL 9.4.26

GPDB 7.0.0 PostgreSQL 12.12 2023.09.29发布

Pivotal Greenplum 和开源版本的GreenPlum的区别

Pivotal Greenplum和开源版本的Greenplum之间的区别主要在许可证和支持方面。

Greenplum是一个开源的大数据分析平台,提供了一个基于PostgreSQL的高度并行的SQL数据库引擎,用于处理大规模数据集。

Pivotal Greenplum是由Pivotal Software公司(现在是VMware的一部分)开发的商业版本,基于开源Greenplum的代码,并提供了额外的功能、支持和服务。

以下是Pivotal Greenplum和开源Greenplum之间的主要区别:

  1. 许可证:开源Greenplum使用Apache许可证,可以免费下载和使用。Pivotal Greenplum则使用了商业许可证,需要付费许可才能使用。
  2. 支持:Pivotal Greenplum提供了商业支持和服务,包括技术支持、培训、咨询和专业服务。开源Greenplum则是由社区维护,提供了免费的社区支持,但是没有商业支持。
  3. 功能:Pivotal Greenplum提供了许多高级功能,包括更高级的安全性、更好的性能和更丰富的管理功能。而开源Greenplum只提供了基本功能。
  4. 发行周期:Pivotal Greenplum的发行周期比开源Greenplum更加稳定。Pivotal公司定期发布新版本,并提供长期支持,而开源Greenplum则由社区开发者在不同时间进行更新。

总的来说,Pivotal Greenplum提供了更高级的功能和商业支持,但需要付费使用。开源Greenplum则是一个完全免费的选项,但可能需要更多的自行配置和支持。

商业版

基于开源的Greenplum数据库,目前主要有以下几个商业版本:

  1. Pivotal Greenplum(现在是VMware的一部分):Pivotal Greenplum是Greenplum Database的商业版本,由Pivotal Software公司开发和支持。它增加了一些新的功能和工具,以帮助企业更好地管理和分析大规模数据。
  2. VMware Tanzu Greenplum:VMware Tanzu Greenplum是由VMware公司支持的Greenplum Database商业版本,它专注于在容器化和云环境中运行的数据管理和分析工作负载。官网:https://docs.vmware.com/en/VMware-Tanzu-Greenplum/index.html
  3. Zilliz AnalyticDB:Zilliz AnalyticDB是一款基于Greenplum Database开发的商业数据库,由Zilliz公司开发和支持。它支持高性能的空间数据处理和分析,以及基于GPU的深度学习计算。官网:https://zilliz.com/
  4. Kyligence Analytics Platform:Kyligence Analytics Platform是一款基于Apache Kylin和Greenplum Database开发的商业数据分析平台,由Kyligence公司开发和支持。它提供了更快的查询速度、更好的数据可视化和更丰富的数据建模功能。官网:https://kyligence.io/

这些商业版本都是基于Greenplum Database开发的,它们在功能和工具方面有所不同,因此用户可以根据自己的需求选择最适合自己的版本。

Pivotal Software于2019年8月被VMware宣布收购。根据交易条款,VMware以每股15美元的价格从Pivotal Software收购其所有的普通股,交易总价值为27亿美元。该交易于同年12月完成,并将Pivotal Software纳入VMware的子公司中。这次收购是VMware扩大其云计算和软件定义数据中心业务的一部分,也是Pivotal Software寻求更好资金和支持的一部分。

GP 6.0新特性

Greenplum 6.0 于 2019 年 9 月 4 日正式发布,内核版本从 PostgreSQL 8.3 升级到PostgreSQL 9.4,数据库的功能和性能得到了巨大的提升,HTAP 能力也得到了进一步加强。除了内核版本升级,还增加了大量新特性,包括基于 WAL 日志的 mirror 同步、分布式死锁检测、复制表、在线扩容、磁盘限额、自动 Master 切换、Zstandard 压缩、GP-GP 集群间高效查询等。

PostgreSQL版本升级

Greenplum 6.0于2019年9月4日正式发布,内核版本从PostgreSQL 8.3升级到PostgreSQL 9.4.20,数据库的功能和性能得到了巨大的提升,HTAP能力也得到了进一步加强。

除了内核版本升级,还增加了大量新特性,包括基于WAL日志的mirror同步、分布式死锁检测、复制表、在线扩容、磁盘限额、自动Master切换、Zstandard压缩、GP-GP集群间高效查询等。

2005年研发之初,Greenplum的内核版本是PostgreSQL 8,在2017年发布的Greenplum 5之前一直是PostgreSQL 8.2版本。Greenplum 5基于PostgreSQL 8.3(开发时的最新版本)已经有近10年的时间(PostgreSQL 8.3版本发布于2008年)。在此期间,PostgreSQL的演进速度是非常快的,尤其是在2015年之后,每年一个大版本的迭代更新,在性能和功能上都有重要的提升,各种特性层出不穷。2015年Greenplum完成了开源,启动内核升级的项目,并在近几年逐步完成了8.3、9.0、9.1、9.2、9.3、9.4、9.5和9.6版本的升级。

而这些特性却无法在Greenplum上直接体现,原因在于,Greenplum是在PostgreSQL 8.3内核的基础上修改代码实现的,而不是类似CitusDB等采取了插件的方式。

Greenplum这样设计的好处是,能够充分修改优化器、执行器、事务、存储等各个模块,达到最优的效果。坏处也很明显:与PostgreSQL社区长期脱节,无法充分利用社区红利。

基于上述原因,在Greenplum中升级PostgreSQL版本是一件非常痛苦的事。随着Greenplum的开源和越来越多PostgreSQL社区资深贡献者的参与,Greenplum终于在6.0版本中完成了PostgreSQL内核的升级。Greenplum 7.0会将PostgreSQL升级到PostgreSQL 12,在查询优化器增强、向量执行引擎、多核性能提升等方面都会有较大的提升。

升级PostgreSQL内核,让Greenplum实现了安全性、权限管理增强、JSONB、GIN索引、SP-GiST索引、并行Vacuum、CTE等用户比较期待的功能。

Greenplum 6.0 于 2019 年 9 月正式发布,包含诸多重要特性。例如,Greenplum 6.0的内核升级到 PostgreSQL 9.4.20,大幅提升了 HTAP(OLAP+OLTP)性能,支持复制表、Zstandard 压缩算法、灵活数据分布、基于流复制的全新高可用机制等。此后,Greenplum继续保持高效、快速迭代的方式,陆续发布了多个版本。Greenplum 6.16 于 2021 年 5 月发布,Greenplum 7.0 将于 2022 年第一季度发布。

HTAP性能大幅提升

这里所说的性能提升主要是PostgreSQL升级带来的好处,PostgreSQL从8.3版到9.4版本积累了非常多的性能优化经验,在OLAP和OLTP方面都有成倍的提升。

特别是原来比较弱势的OLTP功能得到了大幅提升,单节点查询达到80000TPS(Transactions Per Second,数据库每秒处理事务数),插入操作达到18000TPS,更新操作约7000TPS(来自Greenplum官方测试数据)。

支持复制表

这是一个很实用的功能,可以用空间换时间。一个典型的应用场景就是维度表。这类数据表的特点是,数据量不大、很多查询/分析都会与此关联,导致这类表在查询时经常被分发到各个节点中去。而采用复制表功能就不需要进行数据的移动和交换了,减少了网络开销和CPU开销,显著提高了查询效率。

引入了在线扩容和一致性哈希

一致性哈希的引入,在一定程度上缓解了数据倾斜问题,更大的好处在于扩容更方便了。新版本的Greenplum在进行扩容时,无须停止数据库服务,扩容不影响正在执行的查询,扩容时只移动部分数据,扩容速度得到了大幅提升。

支持Zstandard压缩算法

Zstandard是Facebook开源的压缩算法,压缩效率高,在性能和压缩率之间取得了较好的平衡。

基于流复制的全新高可用机制

复制是PostgreSQL连续研发多年的功能,在高可用、备份、恢复(到时间点)等诸多场景中必不可少,提供了非常高的灵活度。

除了上述影响比较大的新特性之外,Greenplum 6.0还支持Kubernetes、磁盘配额管理、Master节点自动Fail-Over机制等新开发或者持续完善中的功能。

Greenplum 7.0

总结完Greenplum 6.0的新特性,我们对Greenplum 7.0充满了期待。Greenplum 7.0会将PostgreSQL升级到PostgreSQL 12,在查询优化器增强、向量执行引擎、多核性能提升等方面都会有较大的提升。

Greenplum 7.0最重要的特性就是向量执行引擎,这也是用户最期待的特性。向量化执行已经在ClickHouse和DorisDB中实现,展现了强大的性能优势。向量化执行可以提高CPU的利用率,提升Greenplum单个Segment实例的查询性能,对并发较低、低延迟要求高的查询场景有较明显的提升。

除此之外,多阶段聚合、支持复制多副本、支持Upsert(更新与插入的合并操作)等功能也将进一步增加Greenplum数据库的HTAP性能。

  • Upsert (Insert on Conflict)
  • 行级安全管理
  • Block Range Indices
  • 排序性能大幅提升
  • 多CPU机器性能大幅提升
  • 并行执行顺序扫描,Join和聚合
  • 避免在Vacuum操作期间不必要地扫描存储页
  • 全文检索具备搜索短语能力(多个相邻单词)
  • postgres_fdw支持远程Join,排序,更新和删除
  • 大幅提升性能,尤其是在多CPU插槽服务器上的可扩展性方面
  • 多数据中心复制
  • 跨集群联合查询
  • GPCC更强的警报功能和更加智能的查询推荐

Greenplum 架构

Greenplum数据库是一个由基于PostgreSQL的数据库组成的阵列,阵列中的数据库工作在一起呈现了一个单一数据库的景象。

Greenplum 数据库是典型的分布式架构,一个 Greenplum 集群通常由一个 Master 节点、一个 Standby Master 节点以及多个 Segment 实例组成,节点之间通过高速网络互连,如图 2-3 所示。Standby Master 节点为 Master 节点提供高可用支持,Mirror Segment 实例为Segment 实例提供高可用支持。当 Master 节点出现故障时,数据库管理系统可以快速切换到 Standby Master 节点继续提供服务。

从软件的角度看,Greenplum 数据库由 Master 节点、Segment 实例和 Interconnect 组件三部分组成,各个功能模块在系统中承载不同的角色。
Master 节点是 Greenplum 数据库的主节点,也是数据库的入口,主要负责接收用户的 SQL 请求,将其生成并行查询计划并优化,然后将查询计划分配给所有的 Segment 实例进行处理,协调集群的各个 Segment 实例按照查询计划一步一步地并行处理,最后获取Segment 实例的计算结果并汇总后返回给客户端。
从用户的角度看 Greenplum 集群,看到的只是 Master 节点,无须关心集群内部机制,所有的并行处理都是在 Master 节点控制下自动完成的。Master 节点一般只存储系统数据,不存储用户数据。为了提高系统可用性,我们通常会在 Greenplum 集群的最后一个数据节点上增加一个 Standby Master 节点。

Segment 是 Greenplum 实际存储数据和进行数据读取计算的节点,每个 Segment 都可以视为一个独立的 PostgreSQL 实例,上面存放着一部分用户数据,同时参与 SQL 执行工作。Greenplum Datanode 通常是指 Segment 实例所在的主机,用户可以根据 Datanode的 CPU 数、内存大小、网络宽带等来确定其上面的 Segment 实例个数。官方建议一个Datanode 上面部署 2 ~ 8 个 Segment 实例。Segment 实例越多,单个实例上面的数据越少(平均分配的情况下),单个 Datanode 的资源使用越充分,查询执行速度就越快。Datanode服务器的数量根据集群的数据量来确定,最大可以支持上千台。另外,为了提高数据的安全性,我们有时候会在生产环境中创建 Mirror Segment 实例作为备份镜像。

Interconnect 是 Master 节点与 Segment 实例、Segment 实例与 Segment 实例之间进行数据传输的组件,它基于千兆交换机或者万兆交换机实现数据在节点之间的高速传输。默认情况下,Interconnect 组件使用 UDP 在集群网络节点之间传输数据,因为 UDP 无法保证服务质量,所以 Interconnect 组件在应用层实现了数据包验证功能,从而达到和 TCP 一样的可靠性。

Greenplum 执行查询语句的过程如下:当 GP Server 收到用户发起的查询语句时,会对查询语句进行编译、优化等操作,生成并行执行计划,分发给 Segment 实例执行;Segment实例通过 Interconnect 组件和 Master 节点、其他 Segment 实例交换数据,然后执行查询语句,执行完毕后,会将数据发回给 Master 节点,最后 Master 节点汇总返回的数据并将其反馈给查询终端。

Master是Greenplum数据库系统的入口。客户端会连接到这个数据库实例并且提交SQL语句。 Master会协调与系统中其他称为Segment的数据库实例一起工作,Segment负责存储和处理数据。

Figure 1. 高层的Greenplum数据库架构

Master主机与Segment主机对比:

Master主机负责Segment主机负责
1. 建立与客户端的会话连接和管理1. 业务数据的存储和存取
2. sql的解析并形成分布式的执行计划2. 执行由master分发的sql语句
3. 将生成好的执行计划分发到每个Segment上执行3. 对于master来说,每个Segment都是对等的,负责对应数据的存储和计算
4. 收集Segment的执行结果4. 每一台机器上可以配置一到多个Segment
5. master不存储业务数据,只存储数据字典5. 由于每个Segment都是对等的,建议采用相同的机器配置
6. master主机可以一主一备,分布在两台机器上6. Segment分primary 和mirror两种,一般交错第存放在子节点上
7. 为了提高性能,master最好单独占用一台机器

Master和Segment的关系:

Master和Segment其实都是一个单独的PostgreSQL数据库,每一个都有自己单独的一套元数据字典。

Client一般只能与Master界面进行交互,Client将SQL发给Master,然后Master对SQL进行分析后,再将其分配给所有的Segment进行操作,并且将汇总结果返回给客户端。

Greenplum的MPP实现——架构优雅

在介绍完这三类主流系统架构,我们来看看Greenplum是怎么做的。Greenplum的MPP实现非常简洁优雅。

图片

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

一切皆并行

Greenplum对标准SQL的支持非常完善。一个SQL执行后,经过Master节点会进行执行计划的拆分,下发到下面的n个节点中,并行处理。再到Master节点进行汇总。

此外Greenplum具有对GIS数据的支持,可以实现对地理信息数据的处理。MADlib是Greenplum与UC Berkeley大学合作的一个开源机器学习库。Greenplum通过集成MADlib算法库,实现“in-database”数据分析和挖掘计算,数据无需搬到库外就可以进行快捷的挖掘分析,还可以利用MPP并行计算能力大幅提高数据分析数据挖掘的性能。

Greenplum在于外部系统对接时,例如Kafka、Spark等,数据的流入和流出均是并行的,会大大提高数据的入库和出库的效率。

图片

使用Greenplum,您能获得什么?

大家在做数据库选型时,通常会基于两个维度:功能和性能。这里给大家展现的是一个媒体数据分析的例子。在完全迁移到Greenplum之前,用户使用的是SAS和Excel来处理数据分析的工作,用Greenplum来进行数据整理和手动预测的工作。

图片

但在这个过程中,处理性能遇到了瓶颈。于是,该用户便采用了我们提供的功能和计算模型来进行了一系列优化,去掉了SAS和Excel,把包括数据整理,特征生成,模型预测等功能全放进了一个库里。

图片

最终达到了下图中的性能指标。每个阶段的性能指标均有了数量级的提高。

图片

Greenplum重点功能

接下来,根据前面提到的架构信息,我们来介绍Greenplum的几个重点功能,与后面提到的调优信息也有很大的关系。

数据分布:每个节点1/n数据

使用一款MPP数据库,最重要的策略和目标就是将数据均匀分布。MPP数据库会将数据进行分片,从而在并行处理的过程中,更快的得到结果。下图中有十二条数据,十二条数据每条数据均会被放到不同的segment实例上。从而每个机器分到了2条数据。查询时,每个机器可能仅需要2个节点运行,便可以得到查询结果。相较于SMP架构中,在一台机器上用一个实例查询,性能的提升是不言而喻的。数据均匀分布后,我们在Master节点下发执行计划,来做二次查询时,多台机器是并行执行的,从而能够发挥所有服务器的能力,从而避免资源的浪费。

图片

因此,在做表结构设计,或数据入库设计时,需要考虑如何把数据更均匀的分布在每一个节点上。在使用过程中,可以通过一些视图来看数据入库过程中有无数据倾斜或者计算瓶颈。具体内容可以参考官方手册相关部分。

多级分区

Greenplum的分区设计与Oracle较类似。与数据分布不同的是,分区是一个逻辑的概念,而数据分布是物理的概念。在创建分区表时,在每个segment都会创建同一套完整的,包括所有表结构的分区表。在每个segment查询时,会将无用的分区裁剪,将无用的数据进行过滤,从而提升查询效率。图中可以看到,每个segment上,只有蓝色的部分参与了查询。

图片

多模存储/多态存储

多模存储/多态存储在很多数据库都会有所涉及,这里,我们为大家总结了三个不同的特征:

  1. 行存储

行存储比较适合OLTP业务,适合频繁的更新或访问大部分字段的场景。Greenplum作为一款HTAP数据库,做了很多对OLTP场景的优化,在这种场景下,可以选用行存储。

  1. 列存储

列存储更适合压缩,查询列子集时速度快,适用于分析型场景。不同列可以使用不同压缩方式:gzip(1-9),quicktz,delta,RLE,zstd。

  1. 外部表

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

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复