首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Snova架构篇(一):Greenplum MPP核心架构

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

原创
作者头像
snova-最佳实践
修改于 2019-12-27 09:33:36
修改于 2019-12-27 09:33:36
3.8K0
举报

本节主要从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

未完待续;

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

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

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

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

评论
作者已关闭评论
暂无评论
推荐阅读
Java程序员的日常—— Arrays工具类的使用
这个类在日常的开发中,还是非常常用的。今天就总结一下Arrays工具类的常用方法。最常用的就是asList,sort,toStream,equals,copyOf了。另外可以深入学习下Arrays的排序算法,这个还是非常有用的。 所有的方法都是在下面的类中进行测试的: public class ArraysTest { String[] array = new String[]{"a","c","2","1","b"}; Integer[] ints = new Integer[]{5
用户1154259
2018/01/17
7780
要想数组用的 6,怎能不懂 java.util.Arrays
java.util.Arrays 类就是为数组而生的专用工具类,基本上常见的对数组的操作,Arrays 类都考虑到了,这让我由衷地觉得,是时候给该类的作者 Josh Bloch、Neal Gafter、John Rose 点个赞了。
沉默王二
2020/07/07
5880
集合框架3-Arrays 类
Arrays 和 Collections是分别操作数组和集合的两个工具类。今天就来对 Arrays 中的内容作个总结。
归思君
2023/10/16
2300
Arrays:点燃你的数组操作技巧的隐秘武器
  数组在 Java 中是一种常用的数据结构,用于存储和操作大量数据。但是在处理数组中的数据,可能会变得复杂和繁琐。Arrays 是我们在处理数组时的一把利器。它提供了丰富的方法和功能,使得数组操作变得更加简单、高效和可靠。无论是排序、搜索、比较还是复制,Arrays 都能够满足我们的需求,来帮助我们充分发挥数组的潜力。接下来我们一起看看 Arrays 的各种功能和用法,以帮助我们更好地利用这个强大的工具。
不一样的科技宅
2023/09/01
1930
Arrays:点燃你的数组操作技巧的隐秘武器
【小家java】聊聊Java中的java.util.Arrays类和java.util.Collections工具类
有很多开发了很多年的人,只使用过它的asList方法去快速构建一个List,但其实它是非常强大的,可以很大程度上简化我们操作数组的方式。
YourBatman
2019/09/03
8260
【小家java】聊聊Java中的java.util.Arrays类和java.util.Collections工具类
java程序员常用的11个API,赶紧收藏
类 String 中包括用于检查各个字符串的方法,比如用于比较字符串,搜索字符串,提取子字符串以及创建具有翻译为大写或小写的所有字符的字符串的副本。
用户2781897
2020/11/02
7370
java程序员常用的11个API,赶紧收藏
不会用的Java数组,从青铜到王者,全解析数组,建议收藏!!!
数据类型 [] 数组名称 = new 数据类型[长度];String[] arr3 = new String[5];
香菜聊游戏
2021/07/16
5910
Java常用类(四)之数组工具类Arrays
前言   数组的工具类java.util.Arrays   由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作。 一、Arrays类概述 1.1、Arrays类的引入   该是java.util包中的类,在我们的代码中想使用这个类的话,就必须使用import进行导入。   在当前类A中,只有java.lang包下的类,以及和当前类A在同一个包下的类,不需要import引入之外,其他所有的包下的类在被使用之前都要import引入
用户1195962
2018/01/18
1.3K0
Java常用类(四)之数组工具类Arrays
Java中Arrays类详解
static <T> List<T> asList(T... a);//只有这一个方法
訾博ZiBo
2025/01/06
1420
大数据必学Java基础(二十八):Arrays工具类和数组的复制操作
为了方便我们对数组进行操作,系统提供一个类Arrays,我们将它当做工具类来使用。
Lansonli
2022/07/21
2310
大数据必学Java基础(二十八):Arrays工具类和数组的复制操作
搞定常被问的数组和排序算法,附面试题
数组是 Java 编程中最重要的数据结构之一,也是最基本的数据结构,Java 中的常用集合 ArrayList、HashMap 等内部的实现都使用到了数组结构。数组是只能用来存储一种类型的集合,可以通过下标访问数值中的所有元素。
架构师修炼
2020/07/17
8330
【Java基础】实用工具类Arrays,让使用数组更轻松。
boolean equals(int[],int[])方法: 可以用于判断两个数组是否相等,返回值是布尔类型(true或false) 案例:
.29.
2022/11/15
3070
【Java基础】实用工具类Arrays,让使用数组更轻松。
Arrays类
  为了简化对数组的操作,JDK1.2在java.util包下增加了一个Arrays类(数组工具类),里面提供了一系列静态方法,用于对数组进行排序、查找等。Arrays类常见方法如表所示。
别团等shy哥发育
2023/02/25
3420
Arrays类
Java基础(六):数组全面解析
Java基础(五):流程控制全解析——分支(if/switch)和循环(for/while)的深度指南
Java微观世界
2025/07/17
1310
Java基础(六):数组全面解析
(31) 剖析Arrays / 计算机程序的思维逻辑
数组是存储多个同类型元素的基本数据结构,数组中的元素在内存连续存放,可以通过数组下标直接定位任意元素,相比我们在后续章节介绍的其他容器,效率非常高。 数组操作是计算机程序中的常见基本操作,Java中有一个类Arrays,包含一些对数组操作的静态方法,本节主要就来讨论这些方法,我们先来看怎么用,然后再来看它们的实现原理。学习Arrays的用法,我们就可以避免重新发明轮子,直接使用,学习它的实现原理,我们就可以在需要的时候,自己实现它不具备的功能。 用法 toString Arrays的toString方法可
swiftma
2018/01/31
1.4K0
关于Arrays你可能还不知道的细节
Arrays 主要对数组提供了一些高效的操作,比如说排序、二分查找、填充、拷贝、相等判断,转化为list等等。我们选择部分看下,其他的可以看jdk中的Arrays源码。
陈琛
2021/04/23
4090
java中数组遍历的三种方式
通常遍历数组都是使用for循环来实现。遍历一维数组很简单,遍历二维数组需要使用双层for循环,通过数组的length属性可获得数组的长度。
全栈程序员站长
2022/09/05
1.6K0
数组操作必备:Arrays类的实用方法和技巧
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
喵手
2023/11/23
5290
数组操作必备:Arrays类的实用方法和技巧
【Java学习】Stream流详解
对于双列集合,需要通过keySet() 或 entrySet() 转化为单列集合,再获取Stream
2的n次方
2024/10/15
1830
【Java学习】Stream流详解
JAVA打印数组的四种方法
无聊看模块Integer.java源码时(IDEA中鼠标悬浮在Integer上按ctrl+alt 可以转到类源码),因为刚学java,想尝试着仿照python的方法打印数组:
全栈程序员站长
2022/08/11
1.4K0
JAVA打印数组的四种方法
相关推荐
Java程序员的日常—— Arrays工具类的使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档