--自由軟件數據庫 PostgreSQL 簡介
前言
今天,如果人們談論起計算機操作系統,肯定有非常多的人會津津樂道自由軟件操作系統 Linux,畢竟,眾人拾柴火焰高,如今沒有任何人敢于忽視 Linux 這個自由軟件操作系統在我們星球的存在,就連國內比較特殊的環境下,也不斷地有各種各樣的 Linux 秀出現讓公眾甚至是那些對計算機知之甚少的群眾都能意識到Linux的存在。但是,如果我們說起數據庫,可能絕大多數的人只會記得有 Oracle,IBM DB2,Informix,Sybase,MS SQL Server,以及在互聯網廣為使用的輕量級 Mysql,而提到 PostgreSQL 的名字,可能很多人都會皺起眉毛:“這是什么?”
“PostgreSQL 是一種特性非常齊全的自由軟件的對象-關系性數據庫管理系統(ORDBMS),它的很多特性正式當今許多商業數據庫的前身”--摘自 PostgreSQL 手冊。
為了讓大家能夠清楚的了解 PostgreSQL,請聽我細細道來。
歷史
出身名門
談到 PostgreSQL,我們不得不談 Berkeley,也就是中文中的“加州大學伯克利分?!边@所大名鼎鼎的大學。老實說,伯克利(BSD)對計算機科學的貢獻可謂巨大,在整個計算機科學的發展史上,幾乎到處都有這所學校的研究人員和學生的足跡。只要稍微對計算機技術史有些記憶的人都會記得在Unix操作系統的發展里程里BSD這三個字的分量,然而也許正是由于BSD在系統和網絡領域里的光芒太耀眼,掩蓋了 BSD 對計算機技術其他分支的貢獻,而PostgreSQL 正是其中之一。
創世紀——Ingres
追本溯源地講,PostgreSQL 最早開始于 BSD 的 Ingres 項目,這個項目主要是研究關系型數據庫技術,早在1970年 E.F. Codd 就提出了關系模型,從那以后,人類在計算機領域的數據管理就進入了一個新的時期。從此人們開始用抽象的關系語句來描述自己的數據,大大提高了人類對數據的概括描述能力。而Ingres項目正是就此進行研究的,它始于1977年,到1985年結束,而其研究成果后來被一家叫 Relational Technologies 的商業公司拿去做成了商品軟件,后來這家公司又被Computer Associates(CA)收購,不知道CA的JASEME(?)里面是否還有當年Ingres的影子?
新項目——Postgres
然后,從1986年開始,BSD 的 Michael Stonebraker 教授領導了稱為Postgres的后Ingres項目,其主要目的是數據庫管理系統的更高級研究,因此而產生了 PostgreSQL 的直接前身,Postgres,而 PostgreSQL的名字也是從 Postgres 項目繼承過來的。這個項目的成果是非常巨大的,在現代數據庫的許多方面都做出的大量的貢獻,比如,面向對象的數據庫,部分索引技術,規則,過程和數據庫擴展等方面都走在了數據庫管理系統的前列。而且,Stonebraker 教授還做出了一件造福全人類的事情,那就是把Postgres放在了BSD版權的保護下,在這個版權的范圍里,任何人幾乎可以做任何事情,包括增強它和商業化等。條件只是把 BSD 的版權聲明包括在軟件的源程序里。
Postgres在1989年發布了第一個版本,因為是BSD版權,所以很快在各種研究機構和一些公眾服務組織里廣泛使用起來,由于 眾多用戶使 Postgres 的開發變得更多地是維護代碼和打補丁,而日益背離了原先的數據庫管理系統的研究的目標,到了1994年 Postgres 在版本4.2的時候正式終止。而 Postgres 的許多成果則轉化成一個商業公司 Illustra,后來 Illustra 被 Informix 收購??吹竭@里,想必大家應該對 Postgres 的影響有一些認識了吧。
炎黃子孫的貢獻——Postgres95
Postgres 并沒有因為 Postgres 項目的終止而停止發展,而是獲得了一次新生:在1994年,兩名伯克利的研究生向伯克利里增加了現代的 SQL 語言的支持。請不要奇怪,SQL 的祖宗是 E.F. Codd 的關系模型,但是 SQL 作為語言,一直到1992年才形成真正的國際標準(還是草案),當時稱為 SQL2,但是人們常稱為 SQL92。而在那之前,所以查詢語言都是由不同的數據庫管理系統自己實現的,比如,在 Postgres 里原來是用叫 Postquel 的查詢語言;這兩位研究生是 Andrew Yu 和 Jolly Chen,看了名字,大家可能會想:“很象中國人的名字嘛”,沒錯,
他們就是黑頭發黃皮膚的炎黃子孫,不過很可惜的是他們并沒有在中國的(包括臺灣省的)xx大學取得這樣的成就。這樣,Postgres 迎來了1995年,大概是受xxxxxxx95的命名方法的影響把,他們倆把這個版本的 Postgres 命名為Postgres95,并且繼續發布了幾個版本,增強了一些特性。
國際化——PostgreSQL
到了1996年,Andrew Yu 和 Jolly Chen 相繼離開 Postgres95 的開發隊伍,(Andrew Yu 加入了Informix,Jolly Chen繼續讀書),而在一些自由軟件黑客(注1)的發起下,Postgres項目又開始了新的歷程,最先是由幾位加拿大黑客發起,開始了 PostgreSQL 項目,后來參與的人越來越多,逐漸成為了一個由近20個國家的近四十名黑客組成的團體共同開發的自由軟件項目。PostgreSQL 重新把版本號放到了原先 Postgres 項目的順序中去,從6.0開始(Postgres 本身到4.2,Postgres95 算5.0)。經過五年多的協作開發,PostgreSQL可以說是目前世界上最先進,功能最強大的自由數據庫管理系統。
目前,PostgreSQL 的穩定版本到了7.0,具有非常豐富的特性和商業級數據庫管理系統的質量。而即將到來的 7.1 版本又將是一次飛躍,將向高質量大型數據庫管理系統的方向又邁進了一步。
最后,讓我告訴您怎么念 PostgreSQL (的確很繞口):Post-gres-Q-L,大概因為大多自由軟件開發人員把SQL念做:S-Q-L,而不是IBM常說的(squel)。
特點
PostgreSQL 可以說是最富特色的自由數據庫管理系統,甚至我們也可以說是最強大的自由軟件數據庫管理系統。事實上,PostgreSQL 的特性覆蓋了SQL-2/SQL-92和SQL-3,首先,它包括了可以說是目前世界上最豐富的數據類型的支持,其中有些數據類型可以說連商業數據庫都不具備,比如IP類型和幾何類型等;其次,PostgreSQL 是全功能的自由軟件數據庫,很長時間以來,PostgreSQL 是唯一支持事務、子查詢、多版本并行控制系統、數據完整性檢查等特性的唯一的一種自由軟件的數據庫管理系統。直到最近才有Inprise 的 InterBase 也加入開放源碼軟件數據庫的行列才打破了這個唯一。最后,PostgreSQL擁有一支非?;钴S的開發隊伍,目前的提交人員已經超過三十人,而且在許多黑客的努力下,PostgreSQL的質量日益提高,也從另外一個側面上增加了人們使用 PostgreSQL 的信心,畢竟數據庫管理系統不能象桌面操作系統那樣一天宕一次還讓人覺得挺滿意:-P。
從技術角度來講,PostgreSQL 采用的是比較經典的 C/S (client/server)結構,也就是一個客戶端對應一個服務器端守護進程的模式,這個守護進程分析客戶端來的查詢請求,生成規劃樹,進行數據檢索并最終把結果格式化輸出后返回給客戶端。為了便于客戶端的程序的編寫,由數據庫服務器提供了統一的客戶端C接口。而不同的客戶端接口都是源自這個C接口,比如ODBC,JDBC,Python,Perl ,Tcl,C/C++,ESQL 等,同時也要指出的是,PostgreSQL 對接口的支持也是非常豐富的,幾乎支持所有類型的數據庫客戶端接口。這一點也可以說是 PostgreSQL 一大優點。
說完優點,不能不說幾句缺點,不能因為是自由軟件而偏袒 PostgreSQL,從 Postgres 開始,PostgreSQL 就經受了多次變化。
首先,早期的 PostgreSQL 繼承了幾乎所有 Ingres, Postgres, Postgres95 的問題:過于學院味,因為首先它的目的是數據庫研究,因此不論在穩定性,性能還是使用方便方面,長期以來一直沒有得到重視,直到 PostgreSQL 項目開始以后,情況才越來越好,目前,PostgreSQL 已經完全可以勝任任何中上規模范圍內的應用范圍的業務。目前有報道的生產數據庫的大小已經有20G的數據量,而測試庫已經超過了60G,已經逼近32位計算的極限。不過學院味也給 PostgreSQL 帶來一個意想不到的好處:大概因為各大學的軟硬件環境差異太大的緣故,它是目前支持平臺最多的數據庫管理系統的一種,所支持的平臺多達十幾種,包括不同的系統,不同的硬件體系。至今,它仍然保持著支持平臺最多的數據庫管理系統的稱號。
其次,PostgreSQL 的確還欠缺一些比較高端的數據庫管理系統需要的特性,比如聯機熱備份,對大對象的有效支持,以及查詢緩沖等提高數據庫性能的機制等。
最后,PostgreSQL 擁有極其強大的擴展能力,你可以很容易地擴展數據類型,內部函數,聚集,操作符等等,而且,別忘了,你擁有所有的源程序,理論上你可以做任何你可以做的事情。
總而言之,PostgreSQL的特性已經完全可以滿足絕大部分用戶的需要,而且其質量和特性仍然在日新月異地進步著,所以,我們有理由相信在不遠的將來,PostgreSQL 肯定能夠成為一種優秀的,自由的,商業數據庫的替代產品。
人物
對 PostgreSQL 做出巨大貢獻的人物太多了,我在這里只能摘其一二而為之,首先是伯克利,作為一個學院,好象不應該進入人物的范疇,但是如果沒有BSD的優良的學術環境,創造出這樣優秀的科學技術成果是不可能的,只要想想我們的5000多所科研單位就能明白。(我是不是應該在這里還要感謝美國?:-P)。
然后是 Michael Stonebraker 教授,正是這位學究的開明才能讓這樣優秀的科技成果走向了公眾,甚至到了”自由世界的仇敵“的我們的手里,而且是所有的東西,不僅僅是一堆二進制文件。
接下來有我們的同胞,Andrew Yu 和 Jolly Chen,他們為 PostgreSQL 走向現代做出了巨大的貢獻。
最后是現在正在辛勤耕耘的黑客們,這些黑客以他們執著的精神和高超的技術,為 PostgreSQL 的日益完善做出了不可磨滅的貢獻。黑客總共有數十人之多,我只好把核心成員挑出來介紹一下,而對于貢獻了更多代碼的其他重要黑客,只好暫且委屈他們一陣子了,如果有機會,我還會進一步介紹他們。
Tom Lane:一位卡耐基梅隆大學(CMU)的電子工程學ph.D(博士),是PostgreSQL的非常重要開發人員,其足跡遍部 PostgreSQL的每一個角落,可以說對 PostgreSQL 的性能和穩定性以及特性的取舍有極其重要的貢獻,在開始參加 PostgreSQL 項目之前,他已經有了十余年的自由軟件開發經驗,可以說是老牌的自由軟件程序員;
Vadim Mikheev:一位來自俄國的黑客,其特點是專干大項目,比如v6.3里面的子查詢,v6.5里面的多版本并行控制,以及即將到來的7.1里面的預寫式日志系統等,可以說是 PostgreSQL 的開拓者;
Jan Wieck:一位來自德國的黑客,有十余年的數據庫開發經驗,原先曾經為SAP等大型軟件廠商工作,后來加入 PostgreSQL 的開發;他也是喜歡大項目,不過興趣是用戶端的特性,比如外鍵,一些過程語言比如pl/pgsql等,即將到來的7.1版本中的CLOB(文本大對象)的部分也是他的作品。
Thmas Lockhart:一位美國黑客,主要負責文檔和若干種數據類型,SQL語法的標準,以及完整性約束等。
Bruce Monjian:來自美國,是一些文檔和項目協調,以及許多完整性約束和SQL語法的標準等,比如OUTER JOIN。
Marc Fournier:加拿大黑客,主要的協調人,維護站點,郵件列表,以及發布版本等。
另外還有大量來自歐洲,澳洲和亞洲(日本)等地的黑客。實際上,有越來越多的黑客的作用變得日益重要,比如即將到來的7.1版本中,就有一位瑞典的黑客對新版本的影響甚至超過了其他核心成員。所以,自由軟件的特點就是,只要愿意,任何人都可以對它有足夠的影響。也就是說,我們命運是真正掌握在自己手里的。
展望
就目前而言, PostgreSQL 的前景非常好,目前的開發版本7.1 是繼6.5之后的又一個巨大的變化,首先是要引入預寫式日志的功能。這樣,事務就擁有了完善的日志機制,可以提供更好的性能,以及還可以實現更優良的備份和災難恢復的能力(比如聯機熱備份和宕機后的自動恢復)。其次是對文本類型的數據段的長度不再限制,從而很大程度上解決了 PostgreSQL 的大對象的問題。尤其在如今的web應用盛行的環境下,這個功能幾乎立即將 PostgreSQL 擺到了可以與其他所有類型的數據庫競爭的地位。而且在SQL標準上又有進一步的提高,比如OUTER JOIN 的支持等等。
在最近的7.2的特性的討論中,查詢緩沖(query cacheing)已經提到議事日程,而且已經有一些補丁可以使用。而且,過程語言的返回記錄的問題也準備解決,這樣就是真正的存儲過程,而不再是簡單意義的函數。同時還有對重寫規則系統的準備和優化器的改進等。相信以后的 PostgreSQL 將是非常優秀的數據庫管理系統??梢詾槲覀儚V大用戶提供更有效和更高層次的服務。
后記
作為一種數據庫管理系統,PostgreSQL 并不象 Linux 與某些商業操作系統相比那樣,得到迅速廣泛的承認,這一點是可以理解的,最近的 Tom Lan 有一段話說得實在:“首先,商業數據庫系統不象某些商業操作系統那樣實在太爛,相反,商業數據庫系統的質量還是非常高的,與之相比,PostgreSQL 仍然有差距”但同時他也相信“我們已經達到商業級的數據庫系統的質量了,只不過不能說是最好的?!?
的確,自由軟件的發展具有跳躍性,當開發者云集的時候,因為開發者大多是利用空余時間進行開發,所以,新的東西可能一下子就增加上去;而如果在自由軟件運動的低潮時,因為缺少開發者,所以可能會有一長段時間的沉寂,而后又會隨著社會的發展而出現新的活動。也就是一種螺旋上升的曲線。
因而,我們在面對自由軟件的時候,一定要有一點:要相信自己和依靠自己,因為自由軟件的發展的確需要每一個愛好者充分發揮自己的聰明才智,同時,也只有自由軟件給你提供了這樣的機會——依靠自己的力量改變自己的命運。最后,也只有這樣,自由軟件之光才能真正照耀我們的世界。
附錄
參考資料
歷史
人物
特性
注:
1,本文中黑客一詞源于英文 Hacker,是指那些計算機尖子,對計算機及全人類都有貢獻的創造者,不是一般媒體上的“黑客”概念,那是指 Cracker,也就是破壞者。