分类:
2008-05-21 15:40:58
PostgreSQL 是一种非常先进的对象-关系型数据库管理系统(ORDBMS),目前功能最强大,特性最丰富和最先进的自由软件数据库系统。有些特性甚至连商业数据库都不具备。这个起源于伯克利(BSD)的数据库研究计划目前已经衍生成一项国际开发项目,并且有非常广泛的用户。本文是PostgreSQL长期用户何伟平(Laser/BITBIRD)的文章“PostgreSQL的昨天、今天和明天”的当前版本。
本文是作者何伟平(Laser/BitBIRD)在经过了十余年的 PostgreSQL 研究与应用之后的又一次重大改版:版本 3.0。这个版本反应了自5年前版本 2.0以来的变化与更新。
今天,Richard Stallman (RMS)自 1985 年 10 月发起的自由软件运动已经有超过了 20 年的历史了,如果说最初 RMS 的愿望是创造一个可自由获取的操作系统的话,那么到今天,自由软件的发展已经远远超过当年 RMS 的目标,并且和整个计算机软件业的发展过程一样,自由软件用户对自由软件的基础需求也经历了由基础工具(编译器、编辑器)到基础平台(操作系统)再到基础应用软件(图形界面、数据库、办公软件、图形处理软件)的过程;甚至超越了传统软件的贡献,在向更高层次的联网系统(WebOS),和联网应用(WebDB,WebApplication)发展。
PostgreSQL 是在这个发展过程中,最重要的基础链条之一:数据库系统的一个典型代表。
“PostgreSQL 是一种特性非常齐全的自由软件的对象-关系性数据库管理系统(ORDBMS),它的很多特性正是当今许多商业数据库的前身” --摘自 PostgreSQL 手册。
谈到 PostgreSQL,我们得谈谈 Berkeley,也就是中文“加州大学伯克利分校”这所大学。伯克利(BSD)对计算机科学的贡献巨大,尤其是在操作系统领域,各种BSD系统以及Bill Joy的TCP实现在整个计算机科学的发展史上熠熠生辉,光芒闪耀。它们的光辉是如此耀眼,以至于让人几乎无法看到伯克利在其它计算机科学的分支上的成就,而 PostgreSQL 正是其中之一。
PostgreSQL 的前身是 BSD 的始于 1977 年的 Ingres 项目,这个项目是 Michael Stonebraker 教授领导的,在 1982 年,Michael Stonebraker 离开伯克利商业化了 Ingres,成为 Relational Technologies 公司的一个产品,后来 Relational Tecchnologies 被 Computer Associates(CA)收购。Ingres 是一个非关系型的数据库(数据关系需要由用户有意识地维护),在 1985 年,Michael Stonebraker 回到伯克利开始一个后-Ingres(post-Ingres)的项目,目的是解决 Ingres 中,同时也是 1980 年代的数据库系统中的主要问题:数据关系维护的问题。这就是 Postgres 的开端。
从1986年开始,Michael Stonebraker 教授发表了一系列论文,探讨了新的数据库的结构设计和扩展设计,然后在 1988 年有了一个原型设计,1989年6月发布了版本 1,1990年6月发布了版本 2,1991年发布了版本 3。在版本 3 里改进了规则系统,增加了多存储系统支持以及改进了查询引擎。在 1993年,用户开始暴涨,并且特性需求急剧增加;在做了一些代码清理、发布了版本 4 之后,Postgres 项目正式终止。而随后 Michael Stonebraker 教授再次去创业,成立 Illustra 公司提供 Postgres 的商业支持,后来 Illustra 在 1997 年被 Informix 收购,而 Michael 教授成为 Informix 的 CTO;再后来 Informix 在 2001 年被 IBM 收购。
Postgres 并没有因为 Postgres 项目的终止而停止发展,而是仍然在各种场合被人们所使用,在1994年,两名伯克利的研究生在做研究生课题的时候,向 Postgres 里增加了现代的 SQL 语言的支持。这里需要解释一下:E.F Code 的关系模型提出之后,对这个模型的实现有非常多的变种,相互之间并不兼容,比如Postgres用的是 QUEL/Postquel 语言,而 SQL 自身作为语言,一直到1992年才形成真正的国际标准(还是草案),当时称为 SQL2,但是人们常称为 SQL92。两位研究生是来自中国香港的 Andrew Yu 和 Jolly Chen 用 bison 和 flex 工具的组合,把Postgres 的Postquel查询语言替换成了 SQL92,然后将Postgres改名为 Postgres95。
Andrew Yu 和 Jolly Chen 最大的贡献在于,完成了 Postgres95 之后,将其发布到了互联网上,随后的 1996 年,加拿大的 Hub.Org Networking Services的 Marc Fournier(一名 FreeBSD 黑客)提供了第一个非大学的开发服务器平台,然后 Bruce Momjian(美国)和 Vadim B. Mikheev(俄国)开始修改以及稳定伯克利发布的代码,并于1996年8月发布了第一个开源版本。
随后,这些黑客把项目名称改变为 PostgreSQL,以对应 SQL 的自持,并且把 PostgreSQL 的版本号重新放到了原先 Postgres 项目的顺序中去,从 6.0 开 始(Postgres 本身到4.2,Postgres95 算5.0)。自 1996 年 8 月到现在的 2008 年,到今年北京奥运会开始的时候,PostgreSQL 项目将已经有 12 年的历史,而 Postgres 的年龄也会超过23岁,已经进入成熟的青年期。
目前,PostgreSQL 的稳定版本到了 8.3.1,在RDBMS的各种特性方面,已经接近于“无可指摘”的境界了。而目前 PostgreSQL 的开发是围绕在更易用的 SQL 语言扩展、SQL 标准的兼容(比如SQL2003、XML/Xquery的支持)、扩展工具、外围工具等方面。
PostgreSQL 的读法:Post-gres-Q-L,因为大多自由软件开发人员把 SQL 念做:S-Q-L,而不是 IBM 常说的(squel)。类似的 MySQL 的官方读音也是:My-S-Q-L,而不是 My-see-quel。
PostgreSQL 的特点可以说是罄竹难书,称其为最先进的开源软件数据库当之无愧。一些当前主流数据库的特性对比可以在本站的一文中找到,就 PostgreSQL 而言,其主要特点有下面的不完全列表:
SQL 语言因为是“集合思维(Thinking in Set)”,基于集合理论进行数据的处理,所以自身没有循环和分支的定义,因此在某些需要精确控制的过程类场合显得有些过于庞大,所以 PostgreSQL 还提供了非常丰富的过程类语言的支持:
PostgreSQL 支持用户定义的索引访问方法,并且内置了 B-tree,哈希和 GiST索引。PostgreSQL 里的索引有下面几个特点:
触发器是 SQL 查询的动作触发的事件。比如,一个 INSERT 查询可能激活一个检查输入值是否有效的触发器。大多数触发器都只是对 INSERT 或者 UPDATE 查询有效。
PostgreSQL 完全支持触发器,可以附着在表上,但是不能在视图上。不过视图可以有规则。多个触发器是按照字母顺序触发的。并且我们还可以用其他过程语言书写触发器函数,不仅仅 PL/PgSQL。
PostgreSQL 的并发管理使用的是一种叫做 MVCC(多版本并发机制)的东西,这个机制实际上就是现在在众多所谓的编程语言里头及其火爆的“Lock Free”的东西。其本质是通过类似科幻世界的时空穿梭的原理,给予每个用户一个自己的“时空”,然后通过原子的“时空”控制,控制时间基线,并以此控制并发更改的可见区域,从而实现近乎无锁的并发,而同时还能在很大程度上保证数据库的 ACID 特性。
规则允许我们对一个到来的查询生成的查询树进行改写。这个功能的一个用途是实现可更新的视图。
PostgreSQL 支持非常广泛的数据类型,包括:
而且,用户还可以创建自己的类型,并且可以利用 GiST 框架把这些类型做成完全可索引的。比如来自 PostGIS 的地理信息系统(GIS)的数据类型。
因为PostgreSQL使用一种基于系统表的可扩展的结构设计(感谢 Michael Stonebraker和所有黑客们!),PostgreSQL内部的几乎所有对象都可以用户定义,包括:
PostgreSQL 的表是可以相互继承的。一个表可以有父表,父表的结构变化也会导致子表的结构变化,而对子表的插入和数据更新等也会反映到父表中。
PostgreSQL 还支持大量其他的特性,比如:
此外 PostgreSQL 还有大量的附加模块和扩展版本,比如:
对 PostgreSQL 做出巨大贡献的人物很多,这里只能摘其一二而为之。
首先是伯克利,作为一个学院,好象不应该进入人物的范畴,但是如果没有 BSD 的优良的学术环境,创造出这样优秀的科学技术成果是不可能的。
然后是 Michael Stonebraker 教授,正是这位学究的开明才能让这样优秀的科技成果走向了公众,并且。
接下来有我们的同胞,Andrew Yu 和 Jolly Chen,他们为 PostgreSQL 走向现代做出了巨大的贡献。
最后是现在正在辛勤耕耘的黑客们,这些黑客以他们执着的精神和高超的技术,为 PostgreSQL的日益完善做出了不可磨灭的贡献。 黑客总共有数十人之多,我只好把核心成员挑出来介绍一下,而对于贡献了更多代码的其他重要黑客,只好暂且委屈他们一阵子了,如果有机会,我还会进一步介绍他们。
Tom Lane
Jan Wieck
Bruce Monjian
Marc Fournier
Peter Eisentraut
另外还有大量来自欧洲,澳洲和亚洲(日本)等地的黑客。实际上,有越来越多的黑客的作用变得日益重要,在邮递列表中每天都有来自不同黑客的 各种各样的补丁程序。所以,自由软件的特点就是,只要愿意,任何人都可以对它有足够的影响。也就是说,我们命运是真正掌握在自己手里的。
下面是些曾经给 PostgreSQL 做过巨大贡献,但是目前已经退出 PostgreSQL 的活跃开发的黑客:
Thmas Lockhart
Vadim Mikheev
就目前而言, PostgreSQL 的前景非常好,目前的稳定版本是 7.3,这个版本在 7.2 版本的基础上再次做了大量的改进和提高。
7.1 是继 6.5 之后的又一个巨大的变化,她首先引入了预写式日志的功能。这样,事务就拥有了完善的日志机制,可以提供更好的性能, 以及还可以实现更优良的备份和灾难恢复的能力(比如联机热备份和宕机后的自动恢复)。其次是对文本类型的数据段的长度不再限制, 从而很大程度上解决了 PostgreSQL 的大对象的问题。尤其在如今的 web 应用盛行的环境下,这个功能几乎立即将 PostgreSQL 摆到了 可以与其他所有类型的数据库竞争的地位。而且在 SQL 标准上又有进一步的提高,比如 OUTER JOIN 的支持等等。
7.2 版本在 7.1 的基础上改进了原来的数据库定期清理工作中排它锁的过程,使数据库维护不再影响数据库的正常使用,同时增强了查询优化的智能, 使数据库对索引的使用更加准确;同时还消除了每个安装节点的免维护事务次数的限制;国际化;以及还有大量其他方面的增强。
7.3 版本在 7.2 版本的基础上,继续增强了许多特性,包括可返回结果集的用户函数,模式(schema)的支持,准备好的查询规划,DROP COLUMN 的支持, 以及vacuum的优化,更好的查询计划器,更好的权限管理系统等。7.3 版本在许多现实项目中得到了充分的证明和大量的应用。标志着 PostgreSQL 正式成为主流数据库产品之一。
在未来的 7.4 版本中,我们有望可以看到索引空间的重复利用,优化了的 IN 子句(大家不用为 IN 恶劣的性能发愁了),新的前后端协议,更优的聚集函数。 甚至还可能提供 windows 的本机移植版本和具有相当的热备份功能的 PITR (即时恢复)和很多人期待已久的表空间的功能。可以说 7.4 将是一个完全胜任 7x24 应用需求的真正的高端数据库,一个具有开拓企业级应用的数据库。我们有什么理由不欢呼呢?
作为一种数据库管理系统,PostgreSQL 并不象 Linux 与某些商业操作系统相比那样,得到迅速广泛的承认,这一点是可以理解的,Tom Lan 曾经有一段话说得实在: “首先,商业数据库系统不象某些商业操作系统那样实在太烂,相反,商业数据库系统的质量还是非常高的,与之相比,PostgreSQL 仍然有一定差距”但同时他也相信 “我们已经达到商业级的数据库系统的质量......”
的确,自由软件的发展具有跳跃性,因为开发者大多是利用空余时间进行开发,当开发者云集的时候,新的东西可能一下子就增加上去;而如果在自由软件运动的低潮时, 因为缺少开发人员,所以可能会有一长段时间的沉寂,而后又会随着社会的发展而出现新的活动。也就是一种螺旋的上升。
因而,我们在面对自由软件的时候,一定要有一点:要相信自己和依靠自己,因为自由软件的发展的确需要每一个爱好者充分发挥自己的聪明才智, 同时,也只有自由软件给你提供了这样的机会——依靠自己的力量改变自己的命运。最后,也只有这样,自由软件之光才能真正照耀我们的世界。
http://www.daemonnews.org/199907/devhistory.html
本文中黑客一词源于英文 Hacker,是指那些计算机尖子,对计算机及全人类都有贡献的创造者, 不是一般媒体上的“黑客” 概念,那是指 Cracker,也就是破坏者。
作者:何伟平 laser(at)pgsqldb(dot)com
注:如要转载请注明作者和出处