专栏首页Snova最佳实践系列Snova架构篇(一):Greenplum MPP核心架构
原创

Snova架构篇(一):Greenplum MPP核心架构

本节主要从MPP架构入手,结合gp核心架构设计理念为深入理解snova打基础。

参考文章:https://doc.huodongjia.com/detail-3839.html Hashdata 简丽荣

目录:

  1. Postgresql基础
  2. Greenplum数仓平台概览
  3. Greenplum核心架构设计

基本概念:

MPP

大规模并行处理


1.psql基础

  • 客户端应用通过libpq协议连接到PostMaster进程
  • PostMaster收到连接请求后,fork出一个子进程Postgres Server来处理来自这个连接的查询语句
  • Postgres Server进程的功能组件可以分成两大类:查询执行和存储管理

2.gp数仓平台概览

大致上可以分为四层:从下至上依次为

  • 核心架构层
  • 服务层

多级容错

在线扩展

任务管理

  • 产品特性
  • 客户端访问和工具

3.核心架构设计:MPP无共享架构

  • 主从节点,主节点负责协调整个集群
  • 一个数据节点可以配置多个节点实例(segment instances)
  • 节点实例并行处理查询(sql)
  • 数据节点有自己的cpu、磁盘和内存(share nothing)
  • 告诉interconnect处理连续数据流(pipeline)

(一)数据均匀分布

在Greenplum数据库中所有表都是分布式的,所以每一张表都会被切片,每个segment实例数据库会存放相应的数据片段。切片(分布)规则可以由用户定义,可选的方案有根据用户对每一张表指定的hash key进行的Hash分布或者选择随机分布。

  • 在决定分布策略时,考虑下列最佳实践:
  • 为所有的表明确定义一个分布列或者随机分布。不要使用默认分布。
  • 理想情况下,使用单个将数据在所有Segment之间均匀分布的列。
  • 不要在查询的WHERE子句中将要使用的列上进行分布。
  • 不要在日期或者时间戳上分布。
  • 分布键列数据应该含有唯一值或者非常高的势。
  • 如果单个列无法实现均匀分布,则使用多列分布键,但不要超过两列。额外的列值通常不会得到更均匀的分布,而且它们要求额外的哈希处理时间。
  • 如果两个列的分布键无法实现数据的均匀分布,则使用随机分布。大部分情况中的多列分布键都要求移动操作来连接表,因此它们对于随机分布来说没有优势。

(二)分布和分区 分布(DISTRIBUTE)与分区(PARTITION)

数据分布
数据分区

目的:

1. 把大数据切片,便于查询

2. 便于数据库维护

分区创建时,每个分区会自带一个Check约束,来限定数据的范围。Check约束也用于 执行查询时定位分区。

支持分区类型:

1. 范围分区 range partition

2. 列表分区 list partition

3. 组合分区

  • 无论是分区表还是非分区表,通过GP的DISTRIBUTE功能,都会把数据分散到各个SEGMENT上去。
  • 分布,是从物理上把数据分散到各个SEGMENT上,这样更有利于并行查询。
  • 分区,是从逻辑上把一个大表分开,这样可以优化查询性能。分区是不会影响数据在各个SEGMENT上的分布情况的

(三)存储:多级分区表

(四)多态存储< 用户自定义存储格式>

行存小结:

全表扫描要扫描更多的数据块。

压缩比较低。

读取任意列的成本不一样,越靠后的列,成本越高。

不适合向量计算、JIT架构。(简单来说,就是不适合批处理形式的计算)

需要REWRITE表时,需要对全表进行REWRITE,例如加字段有默认值。

列存小结:

压缩比高。

仅仅支持AO存储(后面会将)。

读取任意列的成本是一样的。

非常适合向量计算、JIT架构。对大批量数据的访问和统计,效率更高。

读取很多列时,由于需要访问更多的文件,成本更高。例如查询明细。

需要REWRITE表时,不需要对全表操作,例如加字段有默认值,只是添加字段对应的那个文件。

(五)大规模并行数据加载

  • copy命令

copy工具源于PostgreSQL数据库,copy命令支持文件与表之间的数据加载和表对文件的数据卸载。使用copy命令进行数据加载,数据需要经过Master节点分发到Segment节点,同样使用copy命令进行数据卸载,数据也需要由Segment发送到Master节点,由Master节点汇总后再写入外部文件,这样就限制了数据加载与卸载的效率,但是数据量较小的情况下,copy命令就非常方便。

  • 使用gpfdist的外部表
  • gpload

gpload是一种数据装载工具,它扮演着Greenplum外部表并行装载特性的接口的角色。gpload使用定义在一个YAML格式的控制文件中的规范来执行一次装载。

高速数据导入和导出

主节点不是瓶颈,线性扩展

低延迟

加载后立刻可用,不需要中间存储,不需要额外数据处理

导入导出类型多样

外部数据源多样:ETL +文件系统+hadoop

未完待续;

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

相关文章

  • Snova运维篇(六): snova平台子用户及协作者管理

    snova-最佳实践
  • Snova运维篇(五):snova平台监控告警的使用

    本节主要从监控告警的角度,深入了解腾讯云snova平台的监控机制和策略。完善的告警系统,能够获取当前服务端snova的运行情况,当snova某个指标波动超过正常...

    snova-最佳实践
  • Snova架构篇(二):Greenplum核心组件

    当PostgreSQL的后台进程Postgres接收到查询语句后,首先将其传递给查询分析模块,进行词法、语法和语义分析。若是功能性命令(例如建表、创建用户、备份...

    snova-最佳实践
  • 016.Redis Cluster通信原理

    Redis Cluster采用P2P的Gossip协议进行通信,节点之间不断的交换信息,这些信息包括节点负责哪些slot、是否出现故障等信息

    CoderJed
  • Redis Cluster FlushAll失败

    问题场景是在Reids Cluster中使用主从模式,向主节点发送flush命令,预期主从节点都会清空数据库。但是诡异的现象出现了,我们得到的结果是主从节点发生...

    用户1148526
  • 绯闻女孩传八卦也能作为区块链协议?10分钟告诉你为啥

    随着比特币等数字加密货币的兴起,区块链技术逐渐升温,霎时间,各种区块链技术落地场景应运而生。但是关于区块链技术本身,“去中心化”、“数据不可篡改”、“数据溯源”...

    区块链大本营
  • 我是怎么使用最短路径算法解决动态联动问题的

      省市县三级联动问题相信大家都耳熟能详了,选择市下拉选项依赖于省,同样的选择县下拉选项依赖于市。把省市县抽象成三个节点A(省),B(市),C(县),它们的关系...

    用户1168362
  • 痛并快乐着:浅谈大数据时代的分布式存储架构

    从全球知名咨询公司麦肯锡宣称“大数据”时代的到来,时至今日,数据量已经几何倍数的翻增,麦肯锡称:“数据,已经渗透到当今每一个行业和业务职能领域,成为重要的生产因...

    企鹅号小编
  • KDD19开源论文 Heterogeneous Graph Neural Network

    文章针对异构图网络进行建模,得到每个节点的向量表示。首先,利用基于重启的随机游走策略为每个节点根据节点类型选择邻居,然后利用两个模块聚合邻居节点特征:一方面,对...

    Houye
  • Percona XtraDB Cluster高可用与状态快照传输(PXC 5.7 )

    Percona XtraDB Cluster(下称PXC)高可用集群支持任意节点在运行期间的重启,升级或者意外宕机,即它解决了单点故障问题。那在这个意外宕机或者...

    Leshami

扫码关注云+社区

领取腾讯云代金券