1.3 PostgreSQL与Greenplum的关系
1.3.1 PostgreSQL
PostgreSQL是一种非常先进的对象–关系型数据库管理系统(ORDBMS),是目前功能最强大,特性最丰富和技术最先进的自由软件数据库系统之一,其某些特性甚至连商业数据库都不具备。这个起源于伯克利(BSD)的数据库研究计划目前已经衍生成一项国际开发项目,并且有非常广泛的用户。
PostgreSQL的特点可以说是数不胜数,称其为最先进的开源软件数据库当之无愧,支持绝大部分的主流数据库特性,主要体现在如下几方面。
(1)函数/存储过程
PostgreSQL对非常丰富的过程类语言提供支持,可以编写自定义函数/存储过程。
内置的plpgsql,一种类似Oracle的PLsql的语言。
支持的脚本语言有:PL/Lua、PL/LOLCODE、PL/Perl、PL/HP、PL/Python、PL/Ruby、PL/sh、PL/Tcl和PL/Scheme。
编译语言有C、C++和JAVA。
统计语言PL/R。
(2)索引
PostgreSQL支持用户定义的索引访问方法,并且内置了B-tree、哈希和GiST索引。PostgreSQL中的索引有下面几个特点。
可以从后向前扫描。
可以创建表达式索引。
部分索引。
(3)触发器
触发器是由SQL查询的动作触发的事件。比如,一个INSERT查询可能激活一个检查输入值是否有效的触发器。大多数触发器都只对INSERT或者UPDATE 查询有效。
PostgreSQL完全支持触发器,可以附着在表上,但是不能在视图上。不过视图可以有规则。多个触发器是按照字母顺序触发的。我们还可以用其他过程语言书写触发器函数,不仅仅PL/PgSQL。
(4)并发管理(MVCC)
PostgreSQL的并发管理使用的是一种叫做“MVCC”(多版本并发机制)的机制,这种机制实际上就是现在在众多所谓的编程语言中极其火爆的“Lock Free”,其本质是通过类似科幻世界的时空穿梭的原理,给予每个用户一个自己的“时空”,然后通过原子的“时空”控制来控制时间基线,并以此控制并发更改的可见区域,从而实现近乎无锁的并发,而同时还能在很大程度上保证数据库的ACID特性。
(5)规则(RULE)
规则允许我们对由一个查询生成的查询树进行改写。
(6)数据类型
PostgreSQL支持非常广泛的数据类型,包括:
任意精度的数值类型;
无限长度的文本类型;
几何原语;
IPv4和IPv6类型;
CIDR块和MAC地址;
数组。
用户还可以创建自己的类型,并且可以利用GiST框架把这些类型做成完全可索引的,比如来自PostGIS的地理信息系统(GIS)的数据类型。
(7)用户定义对象
因为PostgreSQL使用一种基于系统表的可扩展的结构设计,所以PostgreSQL内部的几乎所有对象都可以由用户定义,这些对象包括:
索引;
操作符(内部操作符可以被覆盖);
聚集函数;
域;
类型转换;
编码转换。
(8)继承
PostgreSQL的表是可以相互继承的。一个表可以有父表,父表的结构变化会导致子表的结构变化,而对子表的插入和数据更新等也会反映到父表中。
(9)其他特性与扩展
PostgreSQL还支持大量其他的特性,比如:
二进制和文本大对象存储;
在线备份;
TOAST(The Oversized-Attribute Storage Technique)用于透明地在独立的地方保存大的数据库属性,当数据超过一定大小的时候,会自动进行压缩以节省空间;
正则表达式。
此外PostgreSQL还有大量的附加模块和扩展版本,比如,多种不同的主从/主主复制方案:
Slony-I;
pgcluster;
Mammoth replicator;
Bucardo。
1.3.2 Greenplum
简单地说,Greenplum就是一个与Oracle、DB2、PostgreSQL一样面向对象的关系型数据库。我们通过标准的SQL可以对Greenplum中的数据进行访问存取。
本质上讲,Greenplum是一个关系型数据库集群,它实际上是由数个独立的数据库服务组合成的逻辑数据库。与Oracle RAC的Shared-Everything架构不同,Greenplum采用Shared-Nothing架构,整个集群由很多个数据节点(Segment Host)和控制节点(Master Host)组成,其中每个数据节点上可以运行多个数据库。简单来说,Shared-Nothing是一个分布式的架构,每个节点相对独立。在典型的Shared-Nothing中,每一个节点上所有的资源(CPU,内存,磁盘)都是独立的,每个节点都只有全部数据的一部分,也只能使用本节点的资源。
基于对Shared-Nothing分布式架构模式的分析,Greenplum高效处理I/O数据吞吐和并发计算的过程就很好理解了。在Greenplum中,需要存储的数据在进入数据库时,将先进行数据分布的处理工作,将一个表中的数据平均分布到每个节点上,并为每个表指定一个分发列(distribute Column),之后便根据Hash来分布数据。基于Shared-Nothing的原则,Greenplum这样处理可以充分发挥每个节点处I/O的处理能力。在这一过程中,控制节点(Master Host)将不再承担计算任务,而只负责必要的逻辑控制和客户端交互。I/O瓶颈的解决为并行计算能力的提升创造了良好的环境,所有节点服务器组成一个强大的计算平台,实现快速的海量并行运算。Greenplum在数据仓库、商业智能的应用上,尤其是在海量数据的处理方面性能极其优异。
Greenplum是面向数据仓库应用的关系型数据库,它是基于目前流行的PosgreSQL开发的,跟PostgreSQL的兼容性非常好,大部分的PostgreSQL客户端工具及PostgreSQL应用都能运行在Greenplum平台上。