Greenplum简介

Greenplum能做什么?

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

核心架构

  • 架构图

    img

  • Master Host:

    • 主节点, 负责协调整个集群
    • 没有数据, 只有用户的元数据
  • Standby Master: 备份主

  • Segment Host:

    • 每个Segment都是一个单节点的PostgreSQL数据库。
    • 包含用户的实际数据, 会等待master给它分配实际任务, 然后进行相互协调执行。
    • 每个Segment对应在另外一个节点上会有一个镜像(mirror), 当这台Segment挂了之后, 它的镜像就会自动提升为primary, 从而实现高可用。
  • 可以随着业务的扩充进行线性扩展

  • 每台机器都是独立的, 机器之间通过Interconnect进行网络通讯, 因为又被称为MPP无共享架构。

数据分布

  • 多种分布策略:

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

    1579322974170

多级分区

1579323128337

多模存储 / 多态存储

  • 通常情况下, 数据价值随着时间越来越低, 所以会有不同的对应处理模式。
  • 就比如说一张销售表:
    • 最近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: 专为复杂查询而生的优化器

    img

    • 可以做到比较好的动态分区裁剪
    • 处理比较复杂的子查询, 或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

细粒度多级内存管理

1579325814442

企业案例

1579326128516

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

流数据(准实时)

  • Greenplum Kafka Connector

    1579326383748

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

集成数据分析

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

    1579327104923

数据融合

1579327153023

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

PXF 架构

“PXF架构”的图片搜索结果

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

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

  • 数据量越大, 模型精度越大。

  • SAS: 需要对数据进行抽样后再训练, 会损失部分精度, 只能用一个节点进行训练。

  • 希望对全量数据进行运算, 将算法内嵌到数据库中, 可以使用数据库的并行计算能力。

  • apache madlib

    “madlib架构”的图片搜索结果

    • 在每个Segment上集成成成Keras或者tensorFlow, 可以使用每个节点上的GPU资源。
posted @ 2020-01-18 14:25  wellDoneGaben  阅读(1780)  评论(0编辑  收藏  举报