Greenplum数据分布和分区策略

news/2024/7/9 20:32:18 标签: 数据库, 大数据, postgresql

了解更多Greenplum技术干货,欢迎访问Greenplum中文社区网站

Greenplum是一个大规模并行处理数据库,它由一个master和多个segment组成,其数据按照设定的分布策略分布于各个segment上。数据表的单个行会被分配到一个或多个segment上,但是有这么多的segment,它到底会被分到哪个或哪些segment上呢?分布策略会告诉我们。

分布策略

在Greenplum 5中,有2种分布策略:

  • 哈希分布
  • 随机分布

在Greenplum 6中,添加了另一个策略:

  • 哈希分布
  • 随机分布
  • 复制分布

数据表的单个行会被分配到一个或多个segment上,但是有这么多的segment,它到底会被分到哪个或哪些segment上呢?分布策略会告诉我们。

哈希分布:

要使用这一策略,需要在创建表使用 “DISTRIBUTED BY(column,[...])” 子句。

散列算法使分布键将每一行分配给特定segment。相同值的键将始终散列到同一个segment。选择唯一的分布键(例如Primary Key)将确保较均匀的数据分布。哈希分布是表的默认分布策略。

如果创建表时未提供DISTRIBUTED子句,则将PRIMARY KEY(如果表真的有的话)或表的第一个合格列用作分布键。什么类型的列是合格列呢?几何类型或用户自定义数据类型的列不能用作Greenplum分布键列。如果表中没有合格的列,则退化为随机分布策略。

但是,如果未提供DISTRIBUTED子句,Greenplum最后会选择哪种分布策略还会受其它因素的影响,例如:GUC gp_create_table_random_default_distribution和当时使用的优化器(optimizer)也将影响最终决定。因此,请千万不要忘记在CREATE TABLE时添加DISTRIBUTED BY子句。否则,表的分布策略可能是只薛定谔的猫。

随机分布:

要使用这一策略,需要在创建表使用 “DISTRIBUTED RANDOMLY” 子句。

随机分布会将数据行按到来顺序依次循环发送到各个segment上。与哈希分布策略不同,具有相同值的数据行不一定位于同一个segment上。虽然随机分布确保了数据的平均分布,但只要有可能,应该尽量选择哈希分布策略,哈希分布的性能更加优良。

复制分布:

这种分布策略是GPDB 6的新增特性

Greenplum数据分布和分区策略

要使用这一策略,需要在创建表使用 “DISTRIBUTED REPLICATED” 子句。

Greenplum数据库将每行数据分配到每个segment上。这种分布策略下,表数据将均匀分布,因为每个segment都存储着同样的数据行。当您需要在segment上执行用户自定义的函数且这些函数需要访问表中的所有行时,就需要用到复制分布策略。或者当有大表与小表join,把足够小的表指定为replicated也可能提升性能。

请注意,有一个例外:catalog表没有分布策略

关于3项策略的摘要:

在这里插入图片描述

分区策略

现在让我们看一下分区,对于Greenplum新手用户,分区的概念会很容易地与分布混淆,其实分布与分区有根本上的的不同。分布是对存储的数据进行物理划分,而分区则是逻辑划分。

分区是通过 “PARTITION BY” 子句完成的,它允许将一个大表划分为多个子表。“SUBPARTITION BY” 子句可以将子表划分为更小的表 。从理论上讲,Greenplum对于根表(root table)可以拥有多少级(level)或多少个分区表(partitioned table)并没有限制,但是对于任一级分区(表的层次结构级别),一个分区表最多可以有32,767个子分区表。

当只考虑分布时,可以只把分区表当作一个普通表。对于一个根表来说,它的数据首先会被分配到某个分区表,然后单个分区表会像普通表一样根据分区表的分布策略分布在Greenplum的各个segments上,这与任何未分区表相同。Greenplum数据库中的表物理地分布在Greenplum各个segments上,使并行查询处理成为可能。表分区是一种逻辑上划分大表的工具,可提高查询性能并促进数据仓库维护任务。分区不会更改表数据在segment之间的物理分布。

Greenplum支持以下分区类型:

  • 范围分区(RANGE):根据数字范围(例如日期或价格)对数据进行划分。
  • 列表分区(LIST):基于值列表的数据划分,例如销售地区或产品线。
  • 两种类型的组合。

对大表进行分区,将提高查询性能并简化数据库的维护任务,例如将旧数据滚动移除出数据库

但是不要创建超出您需要的分区。创建过多的分区可能会拖慢管理和维护的速度,例如清理,恢复segment,扩展集群,检查磁盘使用情况等等。

除非查询优化器可以根据查询谓词修剪分区,否则使用分区不会提高查询性能。需要依次扫描各个分区表的查询比只需扫描无分区的根表的查询运行得慢,因此,如果你的查询中很少能用上分区裁剪,请尽量尝试避免对表进行分区。在GPCC中,可以检查查询监视器中的可视计划,以防扫描无关分区。 您还可能会遇到另一种分区:默认分区。

当进来的数据与所有的分区不匹配时,它将被插入默认分区。如果分区设计没有默认分区,它将拒绝其插入操作。

默认分区是一把双刃剑,有了它,表的操作很安全,但是也可能会掩盖问题。
假设您有一个表,并根据“age”列创建分区。它定义了一个LIST,当数据行的年龄为1时,它进入Partition1;当年龄为2时,它进入Partition2,…,当年龄为100时,它进入Partition100。但是有一天,一个101岁的人来了,BANG,错误发生了,因为您尚未为age = 101创建分区,所以也没有partition101表。这个人无处可去。

如果您为该表创建了默认分区,则101岁的老人将转到该默认分区。问题解决了,大家都很开心。

而假设某一天人类的寿命变得更长,比如200岁,那么100岁以上的人都将被分到默认分区。默认分区会被撑的越来越大,如果没有人注意,查询就会越来越慢,因为该分区太大,以致于分区修剪并无多大效果。既然表的这些分布和分区策略如何重要,您可能会问:我们如何监控这些情况,以及及早发现异常。

我们将在下一篇《GPCC如何提供帮助》详细解答。

关于作者

杨茹,Pivotal软件工程师,Greenplum Command Center(GPCC)全栈工程师。毕业于南开大学自动化系,长期从事一线软件开发工作,是GPCC Table Browser功能的核心开发人员之一。


在这里插入图片描述


http://www.niftyadmin.cn/n/1447087.html

相关文章

Java线程并发中常见的锁

随着互联网的蓬勃发展,越来越多的互联网企业面临着用户量膨胀而带来的并发安全问题。本文着重介绍了在java并发中常见的几种锁机制。 1.偏向锁 偏向锁是JDK1.6提出来的一种锁优化的机制。其核心的思想是,如果程序没有竞争,则取消之前已经取得…

hdu 5045 Contest(dp)

题目链接:hdu 5045 Contest 题目大意:一个队伍有N个人,比赛一共有M道题目,给定一个矩阵,表示每个人答对相应题目的正确率。现在对于每道题,可以派出一名学生参加答题,但是在任意时刻&#xff0c…

让 MySQL 在 Linux 下表名不区分大小写(实为表名全小写)

把 Windows 下的应用部署到 Linux 下,使用到了 Quartz 集群的特性,所以建了 MySql 的中间表,一启动看到报错: Invocation of init method failed; nested exception is org.quartz.JobPersistenceException: Couldnt retrieve tri…

支持中文的把普通字符串转成二进制字符串的函数(转)

支持中文的把普通字符串转成二进制字符串的函数 把普通字符串转成二进制字符串 Function str2bin(varstr)  str2bin""  For i1 To Len(varstr)    varcharmid(varstr,i,1)    varasc Asc(varchar)    If varasc<0 Then      varasc varasc 655…

后门防御阅读笔记,Black-box Detection of Backdoor Attacks with Limited Information and Data

论文标题&#xff1a;Black-box Detection of Backdoor Attacks with Limited Information and Data 论文单位&#xff1a; THBI Lab, Tsinghua University, Beijing 论文作者&#xff1a;Yinpeng Dong, Xiao Yang, Jun Zhu 收录会议&#xff1a;ICCV 2021 开源代码&#x…

fzu 2105 Digits Count 线段树

题目链接&#xff1a;http://acm.fzu.edu.cn/problem.php?pid2105 题意&#xff1a; 给出一个数组A[0]-A[n-1]&#xff0c;每个数最大是16。有4种操作&#xff1a; AND opn L R&#xff1a;L-R区间内的数都AND上opn这个数 OR opn L R&#xff1a;L-R区间内的数都OR上opn这个数…

2021年度总结—四非计算机保研经历(参营:清华网研院、中科大先研院、华师大数据科学院、厦大计算机系、上科大信息学院)

本人背景 本科&#xff1a;❌❌大学(非985、非211、非双一流&#xff0c;四非&#xff09; 专业&#xff1a;计算机科学与技术 Rank&#xff1a;专业1/245&#xff0c;学院1/593&#xff0c;保研率~2% 英语&#xff1a;四六级通过&#xff0c;六级飘过&#xff08;听说硬伤&am…

一篇文章帮你详细了解Greenplum迁移工具—GPCopy

以下资料是根据Pivotal Greenplum官网翻译、Grenplum中文社区博客以及个人测试所得&#xff0c;如有部分描述错误&#xff0c;欢迎下方评论指出&#xff0c;共同进步。 目录 一&#xff1a;gpcopy介绍 二&#xff1a;gpcopy相较于gptransfer 三&#xff1a;gpcopy版本发展史 四…