GreenPlum介绍

是什么?

https://www.jianshu.com/p/43de56ddcd7b
GreenPlum是分布式数据库存储方案,而glusterfs是分布式文件存储方案。
可以在服务器运行无分享的大规模并行处理架构。

架构

GreenPlum介绍_第1张图片
1.总架构

包括master severs和segment severs
master severs是 建立与客户端的连接和管理;SQL解析并形成执行命令,并传达给segment,和收集segment结果;不存储数据只存储字典。
segment是 业务数据存储;用户SQL查询的执行。

就是用户输入SQL命令给master severs,然后master解析命令,传达给segment执行命令,读取数据。

2.MPP架构

将任务并行分散到多个服务器和节点上,在每个节点计算完成后,将各个部分的结果汇总在一起得到最终的结果。

数据分布采用hash分布(同样哈希的分配到一个segment上)和随机均匀分布两种,以均匀分布为目标。

3.高可用性架构

standby master用于备份master,如果master故障,standby变为master。

每个segment都在其他设备里复制了完整或一部分mirror并保证同步,如果某个Primary Segment失效,则mirror提供数据,当segment恢复正常,再通过指令将segment同步mirror的数据。

OLTP和OLAP

两种数据库系统
OLTP:联机事务处理,数据量小,属于交易的处理系统,主要是插入和修改操作。
OLAP:联机分析处理,数据量大,属于查询的分析系统,主要是查询命令。
GreenPlum介绍_第2张图片
greenplum属于OLAP。
greenplum是基于低成本的开放平台基础上提供强大的并行数据计算性能和海量数据管理能力。这个能力主要指的是并行计算能力,是对大任务、复杂任务的快速高效计算。
主要做大数据计算或分析平台,不适用于小规模插入修改删除。

数据库整体概况
gp是基于postgreSQL开发的,可以用SQL大部分的命令。
gp将SQL改造成一个分布式数据库,每个segment节点都是一个单独的SQL数据库,master也是。
master本身不存储数据,所有数据拆分存在每个节点,哈希或者随机分布。

实现高可用性

1.segment的mirror

首先配置primary segment,mirror segment用于primary发生故障时使用。
mirror必须与primary在不同主机,防止单个主机故障。
有两个策略:
group mirroring将该主机所有数据存放在另一台主机上。
GreenPlum介绍_第3张图片
spread mirroring将该主机所有数据分散的分布在其余主机上,要求主机数多于每个主机的备份主机数。
GreenPlum介绍_第4张图片

基础:

GP的数据用元组表示,被打包成块,表由一个或多个块组成,保存在primary通过网络同步到mirror。
堆表:块保存在内存缓存区,当区满时,新块没地方存储才清楚旧块,可以多次读取更新块,不需要昂贵的IO磁盘。当块被清除时,才写入到磁盘,复制到mirror,因此在缓存区时,primary和mirror的块镜像不同,但数据库一致,因为事务日志被复制了。
AO表:立即存储在mirror。

如果primary故障,复制停止,mirror作为segment实例,状态变为更改跟踪,并有一个维护和记录所有块更改的日志,当故障修复,按照日志对primary进行同步,恢复完成,mirror变为已同步。

如果mirror在primary正常时故障,primary变为更改跟踪,记录更改状态用于mirror恢复。

如果master无法连接segment实例,会把该segment标记为down,并激活对应mirror,失败的segment不运行,用股票state可识别失败的segment,故障恢复,可将数据修复,仅复制segment停止运行时遗漏的更改,根据日志。

如果没用mirror,segment失效,系统关闭,必须要有segment实例才可以继续运行。

2.master的mirror

master故障,不会自动切换成standby master,要外部激活(管理员使用外部激活工具gpactivatestandby,可以配置一个虚拟IP,这样客户端就不用修改网络地址),而且有日志,用于恢复master,端口号相同5432。master和standby只需要同步系统目录表就可以。

如果保持同步,master和mirror分别有个一个进程,通过读日志的流复制,保证进行了相同操作。

行存、列存,堆表、AO表的原理和选择

行存和列存

1.行存,按行存储,一行是一个tuple,存在一起,当某列需要被读取时,需要将这列前面的所有列都转换,所以第一列与最后一列的成本不同。
全表扫描要扫描更多的块,压缩比低,不同列读取成本不同,不适合批处理形式。
2.列存,按列存储,每列对应一个或一批文件。读列成本一样,但要读取多个列,则要访问多个文件。
仅支持AO存储,压缩比高,列读取成本一样,适合向量计算,效率高,读取多列要访问更多文件则成本较高

抉择:
如果OLTP需求多,要经常输出列,更多的删除更新操作,考虑行存。
如果OLAP多,要对数据进行统计,压缩比高选择列存。
混合需求,采用分区表,例如对某个分区,然后查询多的用行存,对历史数据统计需求多用列存。

堆表和AO表

1.堆表,堆表所有变更都会产生redo记录,可实现时间点恢复,但不支持增量备份(因为内部会改变,增量要保证原来的不变,在此基础上增加减少)
2.AO表,只追加存储,删除更新数据时,通过另一个BITMAP文件标记被删除的行,通过bit以及偏移对齐判断某一行是否被删除。事物结束,需要调用FSYNC,记录最后一次写入对应的数据偏移。
因此不适合小事务,每次都会产生FSYNC,同时事务结束后数据块有空余也不会被复用。非常适合OLAP,高压缩比批量数据写入,增量备份,每次备份到偏移量即可。

抉择:
小事务多、需要时间点恢复选堆表
列存、批量数据写入选AO表。

你可能感兴趣的:(实习)