Greenplum与DB2 DPF对比

 

1、总体架构说明:

(1)Greenplum: 

 

MPP架构(Massively Parallel Processing):大规模并行处理系统。

整个系统是一组独立的数据库阵列。每个数据库相互独立,有独立的数据存储,日志,索引等等。

集群中HOST分为两种,一个是MASTER HOST,一个是SEGMENT HOST。MASTER HOST

不存放数据,只存放全局系统目录(存放数据自身一些元数据),负责客户端连接,处理SQL命令,分发SEMENT任务,汇总SEGMENT返回的结果,展现给最后的结果给客户端程序。

SEGMENT HOST存放用户数据和索引。同一个HOST上可以根据硬件(CPU core,network等)部署多个INSTANCE,同一个SEGMENT HOST上的两个INSTANCE也不能直接访问。

(2)DB2 DPF:

 

DPF架构类似,也是MPP架构,每个数据库有独立的日志,引擎,锁,缓存管理。服务器之间是通过万兆交换机交换数据。服务器内部通过share_memory实现相互之间访问。服务器16core,每个core对应8G内存,一个RAID组。

 

 

总结:MPP结构最大的特点是,不共享资源。节点内部只访问本身的内存和存储,节点之间信息交互与节点的处理时并行的。MPP在增加节点时性能基本可以实现线性扩展。MPP系统不共享资源,因此,当达到一定规模时,资源比SMP要多。因为MPP系统因为要在不同处理单元之间传递信息,通讯时间比较少的时候,MPP就能充分发挥资源优势,达到高效率。

 

2、数据库核心技术(并行数据流引擎带来的多维分区或者混合分区):

MPP架构中,解决各个节点的并行处理问题。Greenplum 和ISAS都采取了同样的思路:表分区,就是将一张完整的表,通过HASH算法,尽量均衡的放在不同的节点上。

 

 

下面说明ISAS和Greenplum的多维分区:

1)哈希分区

   分区键,这个必须指定,没有类似GP中随机分区的概念。如果没有一个合适的列作为分区键,可以通过表新增一个自动生成列,列中填充随机数据,然后以这个自动生成列作为分区键。

   分区键支持多个列作为分区键,数据库自动通过这两个列计算出HASH值,然后决定分区位置。

   指定分区键之后,会生成hashmap,如果数据不均,可以通过调整hashmap,微调数据分布。这个是GP中目前没有看到的。

   当前ISAS测试中按msisdn号码作为分区键,如表中没有此字段,则用MCC+MNC+CC等字段拼接成的位置区号作为分区键。目的是为了使表记录按分区键的值均匀分布到各计算节点。

   哈希分区和Greenplum中每个表指定Distrubute key类型。

 

2)表分区

   哈希分区的基础上,将同一范围的数据存放在同一范围。只支持RANGE分区。不支持LIST分区。

   表分区是在哈希分区的基础上进一步将表划分,查询的时候减少扫描的数据量,减少I/0。

   当前性能测试中未使用表分区。

   这个在Greenplum中ranger 表分区。

 

3)多维聚族索引(MDC)

物理上将多个维上具有类似值的行聚集在一起放在磁盘上。

这个和表分区有两个主要的区别,首先,所有的索引一定是固定的值,不能像表分区一样是范围,另外,数据库内部是通过索引映射实现的。

当前BSASE表中,所有批次数据存放在同一张表中,60分钟汇聚使用starttime,批次号作为多维聚簇。这样汇聚的时候只会取需要汇聚的4部分数据。

这个和Greenplum中list表分区。

 

ISAS 的3个分区模式可以根据条件组合使用。

 

 

其中ISAS表可以指定分区。维度表可以指定存在0分区上,然后通过表复制,32个分区上就都有维度表的数据。事实表和维度表非分区键合并连接时,避免在分区之间发送数据,从而提高查询性能。

 

另外,还可以通过MQT(物化查询表)实现同样的功能。

MQT,物化查询表,依查询结构而定,可以认为是一种物化的试图,数据可以来自一个或者多个视图。

哈希分区和GP类似。

表分区和Greenplum range类似,多维聚簇, Greenplum中list表分区。

 

 

3、两种MPP数据的细节区别:

两种都是MPP架构的数据。设计思路类似,但是一些细节上还是有一些区别。下面简单说明下:

3.1 数据装载:

Greenplum MASTER节点只承担少量控制功能以及和客户度的交互,完全不承担任何计算。ISAS装载必须有admin节点来完成,通过admin节点上其多进程对数据进行分发。装载需要消耗一定的性能(目前看测试20G文件转载1分钟左右,CPU 33%)。与之相反的是Greenplum在数据装载时,不是我们一般想象的存在一个中心的数据分发节点,而是所有节点同时读取数据,然后根据hash算法,将属于自己的数据留下,将其他的节点的数据通过网络直接传送给他,所以数据装载的速度非常快。

 

 

 

3.2 HA架构:

(1)Greenplum的HA架构:

 

MSATER是通过单独的HOST做备份冗余。最大的特点是segment通过mirror镜像来实现冗余。segment镜像和segment一定保存在不同的host上,master如果连接不上,就标记为Invalid,下次连接上了,就标记为valid状态。

系统如果没有配置mirror,master检测invalid的segment时,就会关闭数据库,来保证数据不出错。如果系统配置了镜像,那么系统在read-only模式和continue模式下处理模式不同,前面不允许DDL和DML操作,可以在线恢复。

后者的操作必须限制在非invalid的segment上的数据,而且invalid的segment恢复时必须重启数据库系统。master镜像就是master的在线standby,因为master上面只保存目录表和系统日志,因此在standby上面一个事务重复记录进程(gpsyncagent连接master以同步,一旦master连不上即坏掉,该进程停止工作,并让standby从master上一个成功事务操作之后开始接管系统(PS:master出故障前,standby上面只gpsyncagent一个进程运行。

 

(2)ISAS HA结构:

通过操作系统或者第三方的软件实现HA。

 

 

 

3.3数据存储:

ISAS只支持行存储。

Greenplum支持混合存储:

(1) 普通的行存储,支持读写。普通的堆积表。

(2) AOT表,行存储,只读,不支持update,delete,可选压缩。

(3) AOT表列存储,只读,不支持update,delete,支持压缩。

列存储的优势是在于适合宽表设计,在查询只查询部分字段的情况下,效率高于行模式。(因为只需要读出相应的列,减少I/O),同时因为都是同样的数据类型,所以更容易压缩。

 

3.4 数据压缩技术:

ISAS压缩基于表级别,目前不能指定压缩级别。提供类似Winzip的压缩级别。ISAS压缩的特点是不光对数据进行压缩。索引和临时表也会自动压缩。目前ISAS宣称的压缩比例是 60~70%。

Greenplum支持两种压缩算法ZLIB,压缩比比较高,提供1到9个级别,数字越大,压缩比越高,一种QUICKLZ,压缩比小,对应的带来的CPU负荷低。

最新的4.2版本提供一种RLE的新的基于列的压缩算法,提供基于列级别的压缩。

 

3.5索引技术:

ISAS只支持B+索引。

Greenplum支持三种索引B-Tree,Bitmap,hash,第三种不推荐使用。

B-Tree:

用在完全不同的列。

用于单列查询。

Bitmap:

低基数列。

列被作为查询的谓语。

Hash:

可以,但是不推荐。

 

还可以指定对语句建部分索引。

索引影响insert,update,创建的时候消耗CPU。

 

创建索引遵守的原则:

 

 

(1)不要把给经常变更的列建索引。全表扫描性能不好时才需要创建索引。

(2)不要建重复的索引并给索引命名。

(3)低基数的列用bitmap索引。单列的查询使用B-Tree索引。

(4)加载数据的时候先drop掉索引,加载之后再重新创建索引。

(5)扫描一个大表的子集时,使用部分索引。

(5)重创建索引执行执行Analyze。

 

 

3.6 Workload manager

 

队列的限制包括:活动的声明计数,活动声明的内存,活动的声明权限,活动声明的花费

Work load manager是数据仓库提供的负载均衡工具。

可以通过设置CPU(百分比),内存(优先级),I/O(优先级),给不同任务。动态的分配资源给不同的任务。

 

GP有类似的resource queue的概念。Resource queue可以配置以下限制:

Active statement count

Active statement memory

Active statement priority

Active statement cost 这个是查询计划估计的,以获取磁盘Page为单元。

 

resource queue 通过设置内存(指定每个statement的内存大小和resource queue的总大小,每个statement 一旦运行,就分配了所有指定的内存直到结束。)

 

GP中CPU是设置优先级和ISAS有区别。

3.8在线扩容:

支持在线扩容,扩容时,表数据需要重新分布。重分布时,是一张一张表进行。正在进行数据重分布的表,不能加载数据。这个类似GP,GP进行数据重分布时,正在重分布的表不能读写。另外GP会自动去掉唯一性限制,所以在表重分布时,碰到重复的行不会报错,所以可能导致ETL出错。

猜你喜欢

转载自jiezhu2007.iteye.com/blog/1896722
db2