GP数据库知识点总结
2022-04-20 14:42:37 0 举报
AI智能生成
GP数据库知识点总结
作者其他创作
大纲/内容
一、概述
简介
Greenplum(以下简称GP)是一款开源数据仓库。基于开源的PostgreSQL改造,主要用来处理大规模数据分析任务,相比Hadoop,Greenplum更适合做大数据的存储、计算和分析引擎
GP是典型的Master/Slave架构,在GP集群中,存在2个Master节点(一个Primary节点和一个Standby)和多个Segment节点,其中每个节点上可以运行多个数据库。GP采用Shared nothing架构(MPP)。是典型的Shared Nothing系统会集数据库。通过内存Cache存储状态的信息,而不在节点上保存状态的信息。节点之间的信息交互都是通过节点互联网络实现,通过将数据分布到多个节点上来实现规模数据的存储,通过并行查询处理来提高查询性能。每个节点仅查询自己的数据,所得到的结果再经过主节点汇总处理得到最终结果,通过增加节点数目达到系统线性扩展
GP是典型的Master/Slave架构,在GP集群中,存在2个Master节点(一个Primary节点和一个Standby)和多个Segment节点,其中每个节点上可以运行多个数据库。GP采用Shared nothing架构(MPP)。是典型的Shared Nothing系统会集数据库。通过内存Cache存储状态的信息,而不在节点上保存状态的信息。节点之间的信息交互都是通过节点互联网络实现,通过将数据分布到多个节点上来实现规模数据的存储,通过并行查询处理来提高查询性能。每个节点仅查询自己的数据,所得到的结果再经过主节点汇总处理得到最终结果,通过增加节点数目达到系统线性扩展
架构
数据库架构
Shard Everything
一般是针对单个主机,完全透明共享CPU/MEMORY/IO,并行处理能力是最差的,典型的代表 SQLServer
Shard Nothing
各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源,类似于MPP(大规模并行处理)模式,各处理单元之间通过协议通信,并行处理和扩展能力更好。典型代表DB2和Hadoop ,各节点相互独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转
我们常说的 Sharding 其实就是Share Nothing架构,它是把某个表从物理存储上被水平分割,并分配给多台服务器(或多个实例),每台服务器可以独立工作,具备共同的schema,比如MySQL Proxy和Google的各种架构,只需增加服务器数就可以增加处理能力和容量
Shared nothing架构(shared nothing architecture)是一 种分布式计算架构。这种架构中的每一个节点( node)都是独立、自给的,而且整个系统中没有单点竞争。
在一个纯Shared Nothing系统中,通过简单地增加一些廉价的计算机做为系统的节点却可以获取几乎无限的扩展
Shared nothing系统通常需要将他的数据分布在多个节点的不同数据库中(不同的计算机处理不同的用户和查询)或者要求每个节点通过使用某些协调协议来保留它自己的应用程序数据备份 ,这通常被成为数据库Sharding
我们常说的 Sharding 其实就是Share Nothing架构,它是把某个表从物理存储上被水平分割,并分配给多台服务器(或多个实例),每台服务器可以独立工作,具备共同的schema,比如MySQL Proxy和Google的各种架构,只需增加服务器数就可以增加处理能力和容量
Shared nothing架构(shared nothing architecture)是一 种分布式计算架构。这种架构中的每一个节点( node)都是独立、自给的,而且整个系统中没有单点竞争。
在一个纯Shared Nothing系统中,通过简单地增加一些廉价的计算机做为系统的节点却可以获取几乎无限的扩展
Shared nothing系统通常需要将他的数据分布在多个节点的不同数据库中(不同的计算机处理不同的用户和查询)或者要求每个节点通过使用某些协调协议来保留它自己的应用程序数据备份 ,这通常被成为数据库Sharding
Shard Disk
各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源,类似于MPP(大规模并行处理)模式,各处理单元之间通过协议通信,并行处理和扩展能力更好。典型代表DB2和Hadoop ,各节点相互独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转
MMP
MPP即大规模并行处理(Massively Parallel Processor )。它是一种基于PostgreSQL的分布式数据库,采用Shared-Nothing架构,主机、操作系统、内存、存储都是自我控制的,不存在共享。数据节点通过专用网络或者商业通用网络互相连接,彼此协同计算,作为整体提供数据库服务
MPP工作原理:MPP是将多个任务分散到多个节点上执行,然后将各节点的执行结果汇总到一起得到最终结果(与Hadoop相似)
MPP虽然是关系型数据库产品,它的特点主要就是查询速度快,数据装载速度快,批量DML处理快。而且性能可以随着硬件的添加,呈线性增加,拥有非常良好的可扩展性。因此,它主要适用于面向分析的事务场景
MPP工作原理:MPP是将多个任务分散到多个节点上执行,然后将各节点的执行结果汇总到一起得到最终结果(与Hadoop相似)
MPP虽然是关系型数据库产品,它的特点主要就是查询速度快,数据装载速度快,批量DML处理快。而且性能可以随着硬件的添加,呈线性增加,拥有非常良好的可扩展性。因此,它主要适用于面向分析的事务场景
Greenplum架构
组成
Master Host
1、访问系统的入口
2、数据库侦听进程 (postgres)
3、处理所有用户连接
4、建立查询计划
5、协调工作处理过程
6、管理工具
7、系统目录表和元数据(数据字典)
8、不存放任何用户数据
2、数据库侦听进程 (postgres)
3、处理所有用户连接
4、建立查询计划
5、协调工作处理过程
6、管理工具
7、系统目录表和元数据(数据字典)
8、不存放任何用户数据
Segment
1、每段(Segment)存放一部分用户数据
2、一个系统可以有多段
3、用户不能直接存取访问
4、所有对段的访问都经过 Master
5、数据库监听进程(postgres)监听来自 Master 的连接
2、一个系统可以有多段
3、用户不能直接存取访问
4、所有对段的访问都经过 Master
5、数据库监听进程(postgres)监听来自 Master 的连接
Interconnect
1、Greenplum 数据库之间的连接层
2、进程间协调和管理
3、基于千兆以太网架构
4、属于系统内部私网配置
5、支持两种协议:TCP or UDP
2、进程间协调和管理
3、基于千兆以太网架构
4、属于系统内部私网配置
5、支持两种协议:TCP or UDP
二、数据库操作
创建和管理数据库
创建数据库
CREATE DATABASE new_dbname;
删除数据库
DROP DATABASE dbname;
克隆一个数据库
CREATE DATABASE new_dbname TEMPLATE old_dbname;
创建和管理表空间
创建表空间
CREATE TABLESPACE fastspace LOCATION '/fastdisk/gpdb';
如果在创建数据库时没有指定表空间,则使用与该数据库模板库一样的表空间。
查询表空间
WITH spc AS (SELECT * FROM gp_tablespace_location(16391))
SELECT seg.role, spc.gp_segment_id as seg_id, seg.hostname, seg.datadir, tblspc_loc
FROM spc, gp_segment_configuration AS seg
WHERE spc.gp_segment_id = seg.content ORDER BY seg_id;
SELECT seg.role, spc.gp_segment_id as seg_id, seg.hostname, seg.datadir, tblspc_loc
FROM spc, gp_segment_configuration AS seg
WHERE spc.gp_segment_id = seg.content ORDER BY seg_id;
删除表空间
DROP TABLESPACE name;
创建和管理SCHEMA
是什么
数据库中:数据库是一个大别墅,SCHEMA是每个房间
数据仓库中:数据仓库是一群大别墅,SCHEMA是某个别墅中的房间
创建一个SCHEMA
CREATE SCHEMA myschema;
创建和管理表
创建表
创建
create table 表名(
id integer,
name text,
price numeric {精确度较高的小数型,同mysql的decimal}
);
id integer,
name text,
price numeric {精确度较高的小数型,同mysql的decimal}
);
指定列级约束
create table 表名(
id integer primary key, {主键约束}
name text not null, {非空约束}
price numeric check(price>0), {检查约束}
type integer unique {唯一约束}
);
【注】:主键、唯一键、随机分布不能共存
id integer primary key, {主键约束}
name text not null, {非空约束}
price numeric check(price>0), {检查约束}
type integer unique {唯一约束}
);
【注】:主键、唯一键、随机分布不能共存
创建列表
create table test(
id integer,
name text not null
)with(orientation=column,appendonly=true)
distributed by(id)
id integer,
name text not null
)with(orientation=column,appendonly=true)
distributed by(id)
选择表的分布策略
GP的分布键作用是保证数据能够均匀分布在不同的存储节点上,充分利用并行计算带来的高性能。GP的分布策略包括HASH分布和随机分布。
HASH分布的关键字是:distributed by (列名)
随机分布的关键字是:distributed by randonly
全分布的关键字是:distributed replicated
在创建表或者修改表定义的时候,必须使用distributed by来执行分布键,从而使数据均匀的存储在不同的segment上。
如果指定的分布键(列名)不是主键,则无法创建(指定的列必须是主键)。
HASH分布的关键字是:distributed by (列名)
随机分布的关键字是:distributed by randonly
全分布的关键字是:distributed replicated
在创建表或者修改表定义的时候,必须使用distributed by来执行分布键,从而使数据均匀的存储在不同的segment上。
如果指定的分布键(列名)不是主键,则无法创建(指定的列必须是主键)。
声明hash分布
create table 表名(
id integer primary key, {主键约束}
name text not null, {非空约束}
price numeric check(price>0), {检查约束}
type integer unique {唯一约束}
)distributed by(id);
id integer primary key, {主键约束}
name text not null, {非空约束}
price numeric check(price>0), {检查约束}
type integer unique {唯一约束}
)distributed by(id);
声明随机分布
create table 表名(
id integer primary key, {主键约束,这里就不能在声明主键约束}
name text not null, {非空约束}
price numeric check(price>0), {检查约束}
type integer unique {唯一约束,这里就不能在声明唯一约束}
)distributed by randonly; {指定随机分布}
id integer primary key, {主键约束,这里就不能在声明主键约束}
name text not null, {非空约束}
price numeric check(price>0), {检查约束}
type integer unique {唯一约束,这里就不能在声明唯一约束}
)distributed by randonly; {指定随机分布}
选择表存储模型
类型
堆存储
堆表存储在OLTP类型负载下表现最好,这种环境中数据会在初始载入后被频繁地修改。
堆表最适合于较小的表,例如维度表,它们在初始载入数据后会经常被更新。
追加优化存储(即AO表)
适合大表,通常是批量装载数且只进行只读查询操作
默认的建表存储模式为堆存储。
创建堆存储表
create table test(id int)distributed by(id);
创建AO表
create table test(
id int,
name text not null,
sex text not null check(sex in('male','famale'))
)with (appendonly=true)
distributed by(id);
【注】:AO表不支持主键、唯一约束
id int,
name text not null,
sex text not null check(sex in('male','famale'))
)with (appendonly=true)
distributed by(id);
【注】:AO表不支持主键、唯一约束
选择面向行或者面向列的存储
概念
面向行的存储
适用于具有许多迭代事务的OLTP类型的工作负载以及一次需要多列的单行,因此检索是高效的。
面向列的存储
适合于在少量列上计算数据聚集的数据仓库负载,或者是用于需要对单列定期更新但不修改其他列数据的情况。
如何选择
行存储
表中的数据需要做更新操作,选择行存储
如果表经常有insert操作,选择行存储
如果在select和where中涉及表的全部或大部分列时,选择行存储
默认情况下,表是按行存储的方式存储
列存储
面向列的表存储只能用于追加优化表(即AO表)。
如果在where和having中对单列做聚合操作且返回少量的行,选择列存储
列存储只在访问宽表的少量列的查询中性能更高
列存储根据有压缩优势
压缩表
表压缩的目的是为了减少占用存储空间,用于数据仓库中的事实表。不经常进行数据和表结构的操作。压缩表必须是AO表。
GP数据库的压缩方式分为:表级压缩、列级压缩
行存储: 表级压缩,列级压缩 压缩算法:ZLIB、QUICKLZ
列存储: 表级压缩,列级压缩 压缩算法:RLE_TYPE、ZLIB、QUICKLZ
GP数据库的压缩方式分为:表级压缩、列级压缩
行存储: 表级压缩,列级压缩 压缩算法:ZLIB、QUICKLZ
列存储: 表级压缩,列级压缩 压缩算法:RLE_TYPE、ZLIB、QUICKLZ
创建压缩表
表级
create table test1(
id integer,
name text not null
)with(appendonly=true,compression='zlib')
distributed by(id);
id integer,
name text not null
)with(appendonly=true,compression='zlib')
distributed by(id);
列级
create table test1(
id integer encoding(compression='zlib'),
name text not null encoding(compression='quickly'),
sex text not null encoding(compression=null)
)with(appendonly=true,orientation=column)
distributed by(id);
id integer encoding(compression='zlib'),
name text not null encoding(compression='quickly'),
sex text not null encoding(compression=null)
)with(appendonly=true,orientation=column)
distributed by(id);
查看
查看AO表test1的分布情况
select get_ao_distribution(test1);
查看AO表test1的压缩率
select get_ao_compression_ratio(test1);
查看AO表test1的占用空间大小
select pg_size_pretty(pg_total_relation_size(test1));
对大型表分区
待续
0 条评论
下一页