PostgreSQL的昨天今天和明天

PostgreSQL 是一種很是複雜的對象-關係型數據庫管理系統(ORDBMS), 也是目前功能最強大,特性最豐富和最複雜的自由軟件數據庫系統。有些特性甚至連商業數據庫都不具有。程序員

這個起源於伯克利(BSD)的數據庫研究計劃目前已經衍生成一項國際開發項目, 而且有很是普遍的用戶。sql

PostgreSQL 的昨天今天和明天 -- 自由軟件數據庫PostgreSQL簡介

前言

今天,若是人們談論起計算機操做系統,確定有很是多的人會津津樂道自由軟件操做系統Linux,畢竟,衆人拾柴火焰高,現在沒有任何人勇於忽視Linux這個自由軟件操做系統在咱們星球的存在,就連國內比較特殊的環境下,也不斷地有各類各樣的Linux秀出現讓公衆、甚至是那些對計算機知之甚少的羣衆都能意識到Linux的存在。可是,若是咱們提及數據庫,可能絕大多數人只會記得有Oracle、IBM DB二、Informix、Sybase、MS SQL Server,以及在互聯網廣爲使用的輕量級 MySQL,而提到PostgreSQL的名字,可能不少人都會皺起眉毛:「這是什麼?」 。數據庫

「PostgreSQL 是一種特性很是齊全的自由軟件的對象關係性數據庫管理系統(ORDBMS),它的不少特性正是當今許多商業數據庫的前身」 -- 摘自PostgreSQL手冊。性能優化

爲了讓你們可以清楚的瞭解PostgreSQL,請聽我細細道來。服務器

歷史

1.出身名門

談到PostgreSQL,咱們不得不談Berkeley,也就是中文中的「加州大學伯克利分校」這所大名鼎鼎的大學。老實說,伯克利(BSD)對計算機科學的貢獻可謂巨大,在整個計算機科學的發展史上,幾乎處處都有這所學校的研究人員和學生的足跡。只要稍微對計算機技術史有些記憶的人都會記得在Unix操做系統的發展里程碑上BSD這三個字的份量,然而也許正是因爲BSD在系統和網絡領域裏的光芒太耀眼,掩蓋了BSD對計算機技術其餘分支的貢獻,而PostgreSQL正是其中之一。網絡

2.創世紀-Ingres

追本溯源地講,PostgreSQL最先開始於BSD的Ingres項目,這個項目主要是研究關係型數據庫技術,早在1970年 E.F. Codd就提出了關係模型,從那之後,人類在計算機領域的數據管理就進入了一個新的時期。今後人們開始用抽象的關係語句來描述本身的數據,大大提升了人類對數據的抽象描述能力。而Ingres項目正是就此進行研究的,它始於1977年,到1985年結束,而其研究成果後來被一家叫Relational Technologies的商業公司拿去作成了商品軟件,後來這家公司又被 Computer Associates(CA)收購,不知道CA的JASMINE裏面是否還有當年Ingres的影子?函數

3.新項目-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的影響有一些認識了吧。性能

4.炎黃子孫的貢獻-Postgres95

Postgres並無由於Postgres項目的終止而中止發展,而是得到了一次新生:在1994年,兩名伯克利的研究生在作研究生課題的時候,向Postgres裏增長了現代的SQL語言的支持。請不要奇怪,SQL的祖宗是E.F. Codd的關係模型,可是SQL做爲語言,一直到1992年才造成真正的國際標準(仍是草案),當時稱爲 SQL2,可是人們常稱爲 SQL92。而在那以前,全部查詢語言都是由不一樣的數據庫管理系統本身實現的,好比,在Postgres裏原來是用叫 Postquel的查詢語言;這兩位研究生是Andrew Yu和Jolly Chen,看了名字,你們可能會想:「很象中國人的名字嘛」,沒錯,他們就是黑頭髮黃皮膚的炎黃子孫,不過很惋惜的是他們並無在中國的(包括臺灣省的)xx大學取得這樣的成就。這樣,Postgres迎來了1995年,大概是受xxxxxxx95的命名方法的「啓發」吧,他們倆把這個版本的 Postgres命名爲Postgres95,而且繼續發佈了幾個版本,加強了一些特性。優化

5.國際化-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.2,具備很是豐富的特性和商業級數據庫管理系統的質量。而即將到來的 7.1 版本又將是一次飛躍,將向高質量大型數據庫管理系統的方向又邁進了一步。

在這裏,先讓我告訴您怎麼念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的信心,畢竟數據庫管理系統不能象桌面操做系統那樣一天宕一次還讓人以爲挺滿意 :-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已經徹底能夠勝任任何中上規模範圍內的應用範圍的業務。目前有報道的生產數據庫的大小已經有TB級的數據量,已經逼近 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,同時維護TODO列表和FAQ;

**Marc Fournier:**加拿大黑客,主要的協調人,維護站點,郵件列表,以及發佈版本等;

**Peter Eisentraut:**德國/瑞典黑客,主要負責文檔編寫、完善、認證和權限管理,製做腳本和一些管理配置接口的制定,以及客戶端交互工具psql等,其做用日益突出,能夠說在7.2版本的開發過程當中是不可或缺的人物;

另外還有大量來自歐洲,澳洲和亞洲(日本)等地的黑客。實際上,有愈來愈多的黑客的做用變得日益重要,在郵遞列表中天天都有來自不一樣黑客的各類各樣的補丁程序。因此,自由軟件的特色就是,只要願意,任何人均可以對它有足夠的影響。也就是說,咱們命運是真正掌握在本身手裏的。

展望

就目前而言, PostgreSQL的前景很是好,目前的穩定版本是7.2,這個版本在7.1版本的基礎上再次作了大量的改進和提升。

7.1是繼6.5以後的又一個巨大的變化,她首先引入了預寫式日誌的功能。這樣,事務就擁有了完善的日誌機制,能夠提供更好的性能,以及還能夠實現更優良的備份和災難恢復的能力(好比聯機熱備份和宕機後的自動恢復)。其次是對文本類型的數據段的長度再也不限制,從而很大程度上解決了PostgreSQL的大對象的問題。尤爲在現在的Web應用盛行的環境下,這個功能幾乎當即將PostgreSQL擺到了能夠與其餘全部類型的數據庫競爭的地位。並且在SQL標準上又有進一步的提升,好比OUTER JOIN的支持等等。

7.2 版本在7.1的基礎上改進了原來的數據庫按期清理工做中排它鎖的過程,使數據庫維護再也不影響數據庫的正常使用,同時加強了查詢優化的智能,使數據庫對索引的使用更加準確;同時還消除了每一個安裝節點的免維護事務次數的限制、國際化、以及還有大量其餘方面的加強。

在將來的7.3版本中,咱們有望能夠看到更加智能的數據庫清理,更優化的不一樣種類的索引類型(好比散列/HASH索引),實時的數據庫熱備份功能,表空間和數據庫大綱(Schema)的支持,更好的權限管理以及更多性能優化方面的加強內容。

後記

做爲一種數據庫管理系統,PostgreSQL並不象Linux與某些商業操做系統相比那樣,獲得迅速普遍的認可,這一點是能夠理解的,最近的Tom Lane有一段話說得實在:「首先,商業數據庫系統不象某些商業操做系統那樣實在太爛,相反,商業數據庫系統的質量仍是很是高的,與之相比,PostgreSQL 仍然有差距」但同時他也相信「咱們已經達到商業級的數據庫系統的質量,只不過不能說是最好的。」

的確,自由軟件的發展具備跳躍性,由於開發者大可能是利用空餘時間進行開發,當開發者雲集的時候,新的東西可能一會兒就增長上去;而若是在自由軟件運動的低潮時,由於缺乏開發人員,因此可能會有一長段時間的沉寂,然後又會隨着社會的發展而出現新的活動。也就是一種螺旋上升的曲線。

於是,咱們在面對自由軟件的時候,必定要有一點:要相信本身和依靠本身,由於自由軟件的發展的確須要每個愛好者充分發揮本身的聰明才智,同時,也只有自由軟件給你提供了這樣的機會――依靠本身的力量改變本身的命運。最後,也只有這樣,自由軟件之光才能真正照耀咱們的世界。

本文整理自何偉平教授相關文章,而目前PostgreSQL版本已經發布到11Beta2,各類新特性不斷增長,PG早已變成各大企業及上雲的首選,正如你們所看到的,PostgreSQL經過你們不段的努力,正在掀起一場熱潮~

相關文章
相關標籤/搜索