Greenplum
Greenplum 是一款基于 PostgreSQL 的开源 MPP(Massively Parallel Processing)分布式数据库,适合海量数据的并行分析和数据仓库场景。
1. 架构概览
Greenplum 采用 共享无架构(Shared-Nothing)MPP 架构,即:
-
每个节点有自己独立的 CPU、内存、磁盘,不共享资源
-
SQL 查询会被拆分并下发到各节点 并行执行
架构图:
+----------------------+| Master 节点 | ← 接收 SQL 查询,解析计划,协调执行+----------------------+| |+------------+ +-------------+| |
+-------------------+ +-------------------+
| Segment 节点 1 | | Segment 节点 2 |
| PostgreSQL 实例 A | | PostgreSQL 实例 B |
+-------------------+ +-------------------+↑ ↑ ↑ ↑
Primary Mirror Primary Mirror(可选)
2. 核心特性
特性 | 说明 |
---|---|
✅ MPP 分布式架构 | 支持上百节点并行执行查询,处理 TB/PB 级数据 |
✅ 基于 PostgreSQL | 支持标准 SQL、继承 PG 的生态 |
✅ 分布式数据存储 | 数据按“分布键”存储在各个 Segment 节点 |
✅ 并行查询引擎 | 查询自动拆解成多个子任务并行执行 |
✅ GPORCA 优化器 | 面向大规模查询的深度优化器,提升性能 |
✅ 外部表支持 | 可快速对接 HDFS、S3、CSV、Kafka 等数据源 |
✅ 分区表支持 | 时间、范围、列表等分区策略提升查询性能 |
✅ 资源队列 Resource Queue | 控制不同用户/组的 CPU/内存配额,防止资源争抢 |
✅ UDF 自定义函数 | 支持 C、Python、SQL 写扩展逻辑 |
3. 表结构类型
表类型 | 描述 |
---|---|
分布式表(Distributed Table) | 将数据根据某字段(分布键)散列分布到各个 Segment 节点上 |
分区表(Partitioned Table) | 在每个 Segment 上再细分为多个分区,提高查询效率 |
外部表(External Table) | 不导入数据,可直接从 HDFS/CSV 文件查询(适合离线分析) |
示例:
CREATE TABLE users (id INT,name TEXT,age INT
) DISTRIBUTED BY (id);
4. 与 PostgreSQL 的主要区别
特性 | PostgreSQL | Greenplum |
---|---|---|
架构类型 | 单机或主备复制 | MPP 分布式架构 |
数据分布 | 不支持 | 分布键 HASH 分布 |
查询优化器 | 基于成本的传统优化器 | GPORCA(面向大数据) |
执行方式 | 单节点执行计划 | 多节点并行执行 |
OLTP 支持 | 强 | 一般,偏向 OLAP |
外部数据源支持 | 需扩展 | 原生外部表 |
插件兼容性 | 高(官方支持) | 限制较多(部分 PG 插件不可用) |
5. 典型使用场景
场景类型 | 是否推荐 | 说明 |
---|---|---|
✅ 大数据仓库 | ✅ | 如 PB 级数据分析系统 |
✅ BI 报表系统 | ✅ | 配合 Superset、Tableau、PowerBI |
✅ 营销数据分析 | ✅ | 多维度汇总、聚合统计 |
✅ 行政政务大数据平台 | ✅ | 统一数据模型、数据服务支撑 |
❌ 高频交易系统 | ❌ | 不适合 OLTP 写入、更新频繁系统 |
❌ 实时系统 | ⚠️ | 不适合毫秒级响应系统,适合分钟级批处理 |
6. 管理工具
工具 | 说明 |
---|---|
gpstart/gpstop | 启动/关闭集群 |
gpexpand | 动态添加节点扩容 |
gpfdist | 快速导入导出数据 |
gp_toolkit | 监控和管理 SQL 视图集合 |
gpadmin 用户 | 默认超级管理员用户 |
7. 示例语法
创建表并指定分布键:
CREATE TABLE sales (sale_id int,product_id int,amount numeric
) DISTRIBUTED BY (sale_id);
外部表读取 CSV 文件:
CREATE EXTERNAL TABLE ext_sales (sale_id int,product_id int,amount numeric
)
LOCATION ('gpfdist://master_host:8081/sales.csv')
FORMAT 'CSV' (DELIMITER ',');
8. 优缺点总结
优点
-
超强并行计算能力(支持百节点规模)
-
标准 SQL 支持
-
成熟稳定,政府/运营商/银行广泛使用
-
支持大规模批量导入导出
-
免费开源(Apache 2.0)
缺点
-
写入性能不如 OLTP 数据库
-
更新/删除开销大(不推荐频繁变更)
-
实时性差,不适合流式处理
-
管理复杂度高(需熟悉节点、分布、资源管理)
9. 企业级功能(含付费版)
功能 | Greenplum 开源版 | 企业版(Pivotal) |
---|---|---|
查询优化器 | ✅ GPORCA | ✅ |
外部表 | ✅ | ✅ |
多租户资源控制 | ✅ | ✅ |
自动容灾 | ❌(手动配置) | ✅ |
数据压缩 | ✅(基础) | ✅(更强) |
可视化管理界面 | ❌(需第三方) | ✅ |
10. 对比 Hive、ClickHouse、TiDB
特性 | Greenplum | Hive | ClickHouse | TiDB |
---|---|---|---|---|
查询响应 | 快 | 慢 | 快 | 快 |
数据更新 | 一般 | 不支持 | 差 | 好 |
SQL 支持 | 标准 SQL | HiveQL | 类 SQL | 完整 SQL |
并发能力 | 一般 | 差 | 一般 | 强(OLTP) |
最佳用途 | 离线分析 | 批量分析 | 实时报表 | 混合负载 |
11. 版本与开源地址
-
最新版本(2024年):Greenplum 7.x
-
GitHub 开源地址:
🔗 https://github.com/greenplum-db/gpdb
总结
你需要 | 推荐 |
---|---|
分布式大数据分析平台 | ✅ Greenplum 是开源 MPP 的优选 |
替代商业数据仓库(如 Teradata、Oracle Exadata) | ✅ Greenplum 免费、兼容 SQL |
实时事务处理系统 | ❌ 不建议使用 Greenplum,用 PostgreSQL 或 TiDB 更合适 |
如果你想部署一个 Greenplum 集群、设计分布策略、接入 BI 工具、或者将 MySQL/PG 数据同步到 Greenplum,我可以继续提供具体部署方案和 ETL 脚本。是否需要?