Greenplum能做什么?

  • 数仓 / OLAP / 即席查询
  • 混合负载 / HTAP
  • 流数据
  • 集成数据分析
  • 数据库内嵌机器学习
  • 现代 SQL

核心架构

  • 架构图
  • Master Host:
  • 主节点, 负责协调整个集群
  • 没有数据, 只有用户的元数据
  • Standby Master: 备份主
  • Segment Host:
  • 每个Segment都是一个单节点的PostgreSQL数据库。
  • 包含用户的实际数据, 会等待master给它分配实际任务, 然后进行相互协调执行。
  • 每个Segment对应在另外一个节点上会有一个镜像(mirror), 当这台Segment挂了之后, 它的镜像就会自动提升为primary, 从而实现高可用。
  • 可以随着业务的扩充进行线性扩展
  • 每台机器都是独立的, 机器之间通过Interconnect进行网络通讯, 因为又被称为MPP无共享架构。

数据分布

  • 多种分布策略:
  • Hash, 随机, 复制表等
  • 最重要的策略和目标是均匀分布: 每个节点 1/n 数据

多级分区

greenplum hive性能 greenplum htap_数据

多模存储 / 多态存储

  • 通常情况下, 数据价值随着时间越来越低, 所以会有不同的对应处理模式。
  • 就比如说一张销售表:
  • 最近3个月的数据, 我们可能要做的是对数据的完善及更新。
  • 距今3个月到1年的数据, 我们可能做的最多的是做一些查询, 聚集, 报表。
  • 1年前+数据, 访问较少。
  • 对应存储模式:
  • 1年前+数据:
  • 采用外部表技术, 数据不放在Greenplum中, 比如hdfs, amazon S3中。
  • 无缝查询所有数据:
  • Text, CSV, Binary, Avro, Parquet, ORC格式
  • 距今3个月到1年的数据:
  • 使用列存储, 更适合压缩(不同列可以使用不同压缩方式: gzip, quickz, delta, RLE, zstd), 查询列子集时速度快。
  • 最近3个月的数据:
  • 使用行存储, 适合OLTP业务, 适合频繁更新或者访问大部分字段的场景。

查询支持

  • Apache ORCA: 专为复杂查询而生的优化器
  • 可以做到比较好的动态分区裁剪
  • 处理比较复杂的子查询, 或CTE(是一个命名的临时结果集,仅在单个SQL语句(例如SELECT,INSERT或DELETE)的执行范围内存在)
  • 数据shuffle
  • 其他技术:
  • 高效压缩算法
  • 多阶段聚集
  • 复制表
  • Unlogged table
  • 物化视图
  • 一致性hash
  • 在线扩容
  • 安全性

混合负载 / HTAP

  • OLTP 优化技术
  • 全局死锁检测 (GDD): 6版本之前用表锁, 优化有使用行锁。
  • 锁优化: 有一个锁竞争比较严重, 优化。
  • 事务优化
  • 复制表
  • 多模存储
  • 灵活索引
  • OLTP 友好的优化器
  • 内核升级: PostgreSQL 9.4
  • 资源管理

特性

资源组(Resource Group)

资源队列(Resource Queue)

并发控制

事务级别

语句级别

死锁


极端情况下会出现

CPU管理

基于比例、基于cgroup

基于粗粒度的优先级

CPU 空闲利用率

可以充分利用空闲CPU

部分利用

内存限制

精细

粗粒度

组内内存共享

T

F

动态修改资源配置

T

部分

排队

无并发槽位或者内存配额时

无并发槽位时

管理DDL、Utility语句

T

F

Segment级别监控管理

T

F

基于规则的资源管理

T

F

细粒度多级内存管理

greenplum hive性能 greenplum htap_SQL_02

企业案例

greenplum hive性能 greenplum htap_SQL_03

  • 如果对TP业务不是追求极致, 可以考虑Greenplum。

流数据(准实时)

  • Greenplum Kafka Connector
  • 该组件的目的是将Kafka Topic中 partition的数据高效导入到Greenplum中。
  • 可以看到最终gpss会将数据并行地导入到每个Segment中而不需要通过master, 效率较高。

集成数据分析

  • 各种数据类型: 结构化、半结构化、非结构化

数据融合

greenplum hive性能 greenplum htap_数据库_04

  • 数据全都放到Greenplum中的话代价还是很大的。
  • 过去会将全部数据从别的平台拉取到Greenplum, 涉及比较复杂的etl过程
  • 4版本后的数据融合功能, 不需要拉取数据到Greenplum, 只要在Greenplum上写SQL就可以查询存储在不同数据中的数据。

PXF 架构

greenplum hive性能 greenplum htap_SQL_05

  • 可以在Greenplum中定义一个外部表, 此外部表通过PXF协议指定到hadoop, hive, hbase, 数据库s3等。
  • 我们只需要在Greenplum上写一个SQL, 底层就会自动去对应的存储系统中拿取数据。
  • 如果底层是Hive的话, PXF还可以做到谓词下推。

基于 SQL 的数据库内嵌机器学习

  • 数据量越大, 模型精度越大。
  • SAS: 需要对数据进行抽样后再训练, 会损失部分精度, 只能用一个节点进行训练。
  • 希望对全量数据进行运算, 将算法内嵌到数据库中, 可以使用数据库的并行计算能力。
  • apache madlib
  • 在每个Segment上集成成成Keras或者tensorFlow, 可以使用每个节点上的GPU资源。