數據庫服務器 PostgreSQL 介紹
PostgreSQL是一種特性非常齊全的自由軟件的對象-關系型數據庫管理系統(ORDBMS),它的很多特性正是當今許多商業數據庫的前身。本文介紹了PostgreSQL發展的一個簡要歷程,供大家參考!
今天,如果人們談論起計算機操作系統,肯定有非常多的人會津津樂道自由軟件操作系統Linux,畢竟,眾人拾柴火焰高,如今沒有任何人敢于忽視 Linux這個自由軟件操作系統在我們星球的存在,就連國內比較特殊的環境下,也不斷地有各種各樣的Linux秀出現讓公眾,甚至是那些對計算機知之甚少 的群眾都能意識到Linux的存在。但是,如果我們說起數據庫,可能絕大多數人只會記得有Oracle,IBM DB2,Informix,Sybase,MS SQL Server以及在互聯網廣為使用的輕量級Mysql,而提到PostgreSQL的名字,可能很多人都會皺起眉毛:“這是什么?”
PostgreSQL是一種特性非常齊全的自由軟件的對象-關系型數據庫管理系統(ORDBMS),它的很多特性正是當今許多商業數據庫的前身。
出身名門
說起PostgreSQL,我們不得不談Berkeley,也就是中文中的“加州大學伯克利分校”這所大名鼎鼎的大學。老實說,伯克利(BSD)對 計算機科學的貢獻可謂巨大,在整個計算機科學的發展史上,幾乎到處都有這所學校的研究人員和學生的足跡。只要稍微對計算機技術史有些記憶的人都會記得在 Unix操作系統的發展里程碑上BSD這三個字的分量,然而也許正是由于BSD在系統和網絡領域里的光芒太耀眼,掩蓋了BSD對計算機技術其他分支的貢 獻,而PostgreSQL正是其中之一。
追本溯源地講,PostgreSQL最早開始于BSD的Ingres項目,這個項目主要是研究關系型數據庫技術,早在1970年E.F. Codd就提出了關系模型,從那以后,人類在計算機領域的數據管理就進入了一個新的時期。從此人們開始用抽象的關系語句來描述自己的數據,大大提高了人類 對數據的抽象描述能力。而Ingres項目正是就此進行研究的,它始于1977年,到1985年結束,而其研究成果后來被一家叫Relational Technologies的商業公司拿去做成了商品軟件,后來這家公司又被Computer Associates(CA)收購,不知道CA的JASMINE里面是否還有當年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年,兩名伯克利的研究生在做研究生課題的時候, 向Postgres里增加了現代的SQL語言的支持。請不要奇怪,SQL的祖宗是E.F. Codd的關系模型,但是SQL作為語言,一直到1992年才形成真正的國際標準(還是草案),當時稱為SQL2,但是人們常稱為SQL92。而在那之 前,所以查詢語言都是由不同的數據庫管理系統自己實現的,比如,在Postgres里原來是用叫Postquel的查詢語言;這兩位研究生是 AndrewYu和Jolly Chen,看了名字,大家可能會想:“很象中國人的名字嘛”,沒錯,他們就是黑頭發黃皮膚的炎黃子孫,不過很可惜的是他們并沒有在中國的(包括臺灣省 的)xx大學取得這樣的成就。這樣,Postgres迎來了1995年,大概是受xxxxxxx95的命名方法的“啟發”吧!他們倆把這個版本的 Postgres命名為Postgres95,并且繼續發布了幾個版本,增強了一些特性。
國際化PostgreSQL
到了1996年,Andrew Yu和Jolly Chen相繼離開Postgres95的開發隊伍,(Andrew Yu加入了Informix,Jolly Chen繼續讀書),而在一些自由軟件黑客的發起下,Postgres項目又開始了新的歷程,最先是由幾位加拿大黑客發起,開始了PostgreSQL項 目,后來參與的人越來越多,逐漸成為了一個由近20個國家的近四十名黑客組成的團體共同開發的自由軟件項目。PostgreSQL重新把版本號放到了原先 Postgres項目的順序中去,從6.0開始(Postgres本身到4.2,Postgres95算5.0)。經過五年多的協作開 發,PostgreSQL可以說是目前世界上最先進,功能最強大的自由軟件的數據庫管理系統。
目前,PostgreSQL的穩定版本到了7.3,具有非常豐富的特性和商業級數據庫管理系統的質量。而即將到來的7.4版本又將是一次飛躍,將向高質量大型數據庫管理系統的方向又邁進了一步。
在這里,先讓我告訴您怎么念PostgreSQL(的確很繞口):Post-gres-Q-L,大概因為大多自由軟件開發人員把SQL念做:S-Q-L,而不是IBM常說的(squel)。
特點
PostgreSQL可以說是最富特色的自由數據庫管理系統,甚至我們也可以說是最強大的自由軟件數據庫管理系統。事實上,PostgreSQL的 特性覆蓋了SQL-2/SQL-92和SQL-3/SQL-99,首先,它包括了可以說是目前世界上最豐富的數據類型的支持,其中有些數據類型可以說連商 業數據庫都不具備,比如IP類型和幾何類型等;其次,PostgreSQL是全功能的自由軟件數據庫,很長時間以來,PostgreSQL是唯一支持事 務、子查詢、多版本并行控制系統、數據完整性檢查等特性的唯一的一種自由軟件的數據庫管理系統。直到最近才有Inprise的InterBase以及 SAP等廠商將其原先專有軟件開放為自由軟件之后才打破了這個唯一。最后,PostgreSQL擁有一支非常活躍的開發隊伍,目前的提交人員已經超過三十 人,而且在許多黑客的努力下,PostgreSQL的質量日益提高,也從另外一個側面上增加了人們使用PostgreSQL的信心,畢竟數據庫管理系統不 能象桌面操作系統那樣一天宕一次還讓人覺得挺滿意。
從技術角度來講,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已經完全可以勝任任何中上規模范圍內的應用范圍的業務。目前有報道的生產數據庫的大小已經有TB級的數據量,已經逼近32位計算 的極限。不過學院味也給PostgreSQL帶來一個意想不到的好處:大概因為各大學的軟硬件環境差異太大的緣故,它是目前支持平臺最多的數據庫管理系統 的一種,所支持的平臺多達十幾種,包括不同的系統,不同的硬件體系。至今,它仍然保持著支持平臺最多的數據庫管理系統的稱號。
其次,PostgreSQL的確還欠缺一些比較高端的數據庫管理系統需要的特性,比如聯機熱備份,數據庫集群,更優良的管理工具和更加自動化的系統優化功能等提高數據庫性能的機制等。
但是,話說回來,PostgreSQL擁有極其強大的擴展能力,你可以很容易地擴展數據類型,內部函數,聚集,操作符等等,而且,別忘了,你擁有所有的源程序,理論上你可以做任何你可以做的事情。因此,很多缺點,在轉瞬之間就會消失也是很正常的。
總而言之,PostgreSQL的特性已經完全可以滿足絕大部分用戶的需要,而且其質量和特性仍然在日新月異地進步著,所以,我們有理由相信在不遠的將來,PostgreSQL肯定能夠成為一種優秀的,自由的,商業數據庫的替代產品。
未來的前景
就目前而言,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仍然有一定差距”但同時他也相信“我們已經達到商業級的數據庫系統的質量......”。
的確,自由軟件的發展具有跳躍性,因為開發者大多是利用空余時間進行開發,當開發者云集的時候,新的東西可能一下子就增加上去;而如果在自由軟件運 動的低潮時,因為缺少開發人員,所以可能會有一長段時間的沉寂,而后又會隨著社會的發展而出現新的活動。也就是一種螺旋的上升。
因而,我們在面對自由軟件的時候,一定要有一點:要相信自己和依靠自己,因為自由軟件的發展的確需要每一個愛好者充分發揮自己的聰明才智,同時,也 只有自由軟件給你提供了這樣的機會——依靠自己的力量改變自己的命運。最后,也只有這樣,自由軟件之光才能真正照耀我們的世界。