2008年7月15日 星期二

PostgreSQL簡史

正如 Wikipedia 的 PostgreSQL 條目所說的,PostgreSQL 已有相當的歷史。要追溯其起源,要先談到它的前身 ─ Ingres。1970 年代初期,IBM 公司展開 System R 專案。System R 專案到底有哪些內容?說實在的,我也搞不清楚,但是它所遺留下的最大資產就是 SQL 這個語言。另外,像著名的幾位關連式資料庫權威,比如 E.F.Codd、C.J.Date 、J.N.Gray 等等這幾位大師,都曾經在早期投入這個專案。如果對這個專案有興趣的朋友可以參考下面這篇文章:A History and Evaluation of System R。System R 這個專案,在 1973 年有一些成果出來了,所以研究團隊就出版了一串文章,描述這個系統是如何架構起來的。這時候,U.C.Berkely,也就是我們台灣通稱的柏克萊大學有兩位科學家 Michael Stonebraker 和 Eugene Wong,在研讀了這串文章之後,突然想,為何我們不也來弄一套屬於我們自己的關連式資料庫的專案?

其實,那時候他們兩位仁兄已經有一個專案在手裏了,那個專案的名稱就是 Ingres ─ 全名是 INteractive Graphics REtrieval System,就是由那幾個粗體字頭組成的名字。這個專案原來的目標是打算搞一套地理資料庫系統,那時候還沒有 GIS 這個名詞,野心也還沒那麼大。但是就在這一年,這兩位先生似乎到了一個瓶頸,所以想利用這個靈感,把專案目標弄得更大一點,方向則轉成發展一套就像 System R 一樣的系統,最名就叫做 Ingres。所以先挪用原專案的經費,而且再提 Proposal,向幾個基金會尋求研究經費。Stonebraker 一開始找上 DARPA。DARPA 就是支持 Internet 或 TCP/IP 最早期發展的美國國防部先進研究專案局,那時候全美國有關電腦計算方面的研發經費,最大的經費來源就是它,所以 Stonebraker 一開始也是先找上 DARPA。可惜的是,那時候 DARPA 已有支持其它相同屬性的專案,所以並沒有核准經費給 Stonebraker,而且還好心勸 Stonebraker 改變專案目標,可是 Stonebraker 不死心,轉向其它的經費來源尋求支持,最後有四個機構同意出錢支持,分別是著名的 NFS (The National Science Foundation,美國國家科學基金會,是 DARPA 結束後支持 Internet 和 TCP/IP 繼續發展的單位) 和另外三個美國軍方單位:the Air Force Office of Scientific Research, the Army Research Office, and the Navy Electronic Systems Command,很巧的是陸海空三軍各有一個單位。拿到經費後,大約在 1974 年,就釋出了第一個 prototype 版本的 Ingres,這個時間點也被大家認為是 Ingres 和 PostgreSQL 的最早起點。

整個 1970 年代,整個系統一直都在緊貼著 IBM 的 System R 的發展,一直修改、重寫整個 prototype,研究團隊來來去去,一面累積相關的技術和經驗,一方面也把整套系統漸漸轉往當初 DEC 的迷你電腦和一套新的且漸漸受歡迎的作業系統 ─ Unix 上,提供了一套「便宜甚至算是幾乎免費」的 System R 取代方案。而且早期 Ingres 就好像 Unix 早期一樣,是以極低的烤貝費用提供原始碼給有興趣的人或研究單位使用,所以很多相關領域的學生,就從這些原始碼中得到靈感,紛紛出來開設相關的公司,賣的就是 Ingres 的複製品,這些公司有的後來很有名,比如 Sybase。目前的 Microsoft SQL Server 其實就是由 Sybase 重新改寫而成的。這些都算是 Ingres 的徒子徒孫。

就像一些美國院校研究開發出來可用的專案,最後一定會轉成商品化,後來 Michael Stonebraker 和 Eugene Wong 兩位再加上一位柏克萊教授 ─ Lawrence A. Rowe,三位成立了一家名為 RTI (Relational Technology, Inc.) 的公司,除了專門以便宜的價格販售 Ingres 原始碼,也提供商業性服務,最後甚至改寫 Ingres,出售 Ingres 後續的版本(商業化版本)。最後這家公司甚至在 1980 年代終期,改名為 Ingres,但是在 1990 年十一月被 ASK Corporation 所併購。最後 ASK/Ingres 在 1994 年被 CA (Computer Associates) 所併,成為 CA 的一個資料庫主力產品,一直到現在。2004 年,CA 把 Ingres r3 釋出為 open source 軟體,但是是以社群版的形式,商業版本還是繼續發行,有興趣的朋友可以去下載來參考看看。

其實 Michael Stonebraker 在 1982 年成立 Ingres Corporation 後沒多久,在 1985 年就離開了這家公司,回到柏克萊。他回到柏克萊後,就想要立刻新啟一個新的專案,而且要和 Ingres 的原始碼完全切割、重寫。他成立了 Postgres 計劃,告訴大家它是 Ingres 的後續者。1986 年時,該專案小組先寫了幾篇 paper,主要是描述這個新的 RDB 的基礎想法和概念,而以這個概念在 1988 年寫出一個可以跑的 prototype,在 1989 年六月釋出很少人用過的第一版,隨後很快的,在 1990 年六月把整個 rules system 重寫後釋出第二版。1991 年又重寫了一次 rules system,釋出第三版,這個版本還增加了多重的儲存管理系統,有點初步的 RDBMS 的架式了,也改進了查詢引擎的速度。這時候開始,Postgres 的使用者開始多起來了,大家提出的需求也越來越多,專案人員開始受不了了。終於 1993 年,在釋出第四版後,Postgres 計劃宣布結束!

雖然官方版本的專案結束了,但是由於 Postgres 的 License 是 BSD License,所以每個人都可以拿了原始碼後,再把它拿來做成自己的專案或商品。所以只要有人願意繼續以社群的方式維護這個專案,它就可以以另一個形式存在。所以在 1994 年,柏克萊的兩位博士候選人,Andrew Yu and Jolly Chen,把原本使用專屬於 Ingres 的查詢語言 QUEL 改寫成以 SQL 查詢語言後,成立 Postgres95 專案,而且在網站上釋出。次年,在幾位有識之士的努力下,在 1996 年八月一日,正式將 Postgres 以非大學版本的 open source 版本釋出。而且為了反映 Postgres95 是以 SQL 為其查詢語言,同時也正式將 Postgres95 正名為 PostgreSQL。發音的方式請參考這個 MP3 檔,不要再念錯了。

1997 年元月,PostgreSQL 的正式的第一個版本 6.0 版釋出。從這個時候開始,PostgreSQL 是一個全球性的 open source 社群,維護及開發原始的的任務是利用 Internet,由分散在全球各地社群會員維護。

另一方面,Postgres 商業版本由 Paula Hawthorn 和 Michael Stonebraker 成立的 Illustra Information Technologies 支援和繼續開發,而且改名為 Illustra。Illustra 後來被 Informix 所併購,而 Michael Stonebraker 也曾經成為 Informix Corporation 的 CTO,而 Informix 在併購 Illustra 之後,把它整合到 Informix Universal Server 中,一直到 2001 年資料庫產業所發生的最大新聞,IBM 以 10 億美金併購 Informix 為止。

自從 PostgreSQL 變成 open source 專案後,由於來自全球各角落的專家投入,所以加入了不少較先進的技術,比如 MVCC,這個技術是有關同時性 (Concurrency) 問題解決技術,將來我會另外抽空專文介紹。

時序進入第二個千禧年,在 2000 年五月,PostgreSQL 釋出 7.0 版,版號正式進入 7。7.x 版的改進不少,最大的改變是增加 schema 的概念,預存查詢,outer joins,加入保全功能,等等。

2005 年元月,PostgreSQL 釋出 8.0 版,版號進入 8。8.x 版本有幾個很重要的演進,比如像 Oracle 一樣的 tablespaces,Java Store Procedure ─ PL/Java,某個時點的資料庫復原,巢狀交易,savepoint 等等。最重要的,大概是原生版本的 Windows 版 PostgreSQL。MySQL 之所以可以在台灣的開放源碼資料庫市場占這麼大的市占率,就是因為最早期學習 PHP 的人,十個裏面有九個只熟悉 Windows 環境,所以在 IIS/PHP 的環境中,當時只有 MySQL 是 Windows 下的開放源碼 DBMS。由於台灣的 Internet 產業,充斥著只願看 1-2-3 這類書籍的開發者。所以在不能完全從微軟的系統斷奶,以及習慣速食文化,台灣書商就很聰明的,一窩蜂出了一堆 PHP/MySQL 的書,以致於 MySQL 充斥於 open source 市場。8.0 版之後,PostgreSQL 也終於進入這個市場,搭配新版本的 Windows 版本管理工具 pgadmin III 後,變成一套可以和商業版本 RDBMS 競爭的資料庫系統。

沒有留言:

張貼留言

用 Claude 在 PsotgreSQL 的 Docker Container 中建立一個 database

Claude 是一個很強的 AI 工具,大概是我用過唯一可以和 Gemini 挑戰的 AI 工具。 它對於程式設計的能力相當強大。我這個測試證明了,不止程式設計能力很強,連資料庫的整個架構能力也是很嚇人的。 之前,我不是在 Proxmox VE 上建了一個 Zorin OS 的 ...