作者 | Caig Kerstiens
編譯 | 王瑞平
審校 | 云昭
Postgres開源數據庫剛剛度過了它的25歲生日。遺憾的是,它既沒有憑借數百萬美元的風險投資脫穎而出,也沒有獲得技術布道師DevRel團隊的支持,只處于起步階段,但卻一直在更新。
幾個月之后,Postgres 16正式版可能會閃亮登場,提及此,不免讓人感到熱血沸騰!我們也一起來回顧下Postgres是如何“走到”今天的吧!
一、Ingres、Postgres95、PostgreSQL
追根溯源,其實,Postgres起源于Ingres數據庫系統(tǒng),最初是在加州大學伯克利分校Michael Stonebraker的指導下開始構建的交互式圖形檢索系統(tǒng)。后來,為提升數據庫性能,團隊改弦易轍,轉而資助了關系數據庫項目。
一開始,他們用的是QUEL編程語言而不是SQL;1986年,美國國家標準學會正式將SQL設置為首選項,至此,許多相關數據庫項目都朝這個方向發(fā)展。
·1995年,Postgres95正式發(fā)布,SQL也順理成章地被添加進來。
·1996年,當第一個PostgreSQL版本6.0發(fā)布時,PostgreSQL全球開發(fā)團隊也成立了,標志著開發(fā)走出學術界,項目領導小組也延續(xù)至今!
·1999年,Postgres 6.5發(fā)布,很多技術理念至今仍被采用!
二、豐富功能:Postgres開始“成長”
2000年,Postgres開啟它的成長之旅,通過外鍵和連接引入其它數據庫。
21世紀初,Postgres又吸納了更多的關鍵基礎部件,主要側重于構建可靠的數據庫和SQL,用戶可獲取如下的功能:
1.預寫式日志(Write-Ahead-Log):一種數據庫日志記錄技術,用于在數據實際寫入磁盤之前記錄數據的更改,以確保數據的一致性和完整性。
2.外連接(Outer joins):一種數據庫連接操作,用于將兩個表中的記錄組合在一起,即使其中一個表中沒有與另一個表中的記錄匹配的記錄。
3.字段刪除
4.模式
回顧2000年的一些細節(jié),最令我感到興奮的是:“一些對Postgres做出貢獻的人至今仍是Postgres社區(qū)里的支柱。這些人包括我的同事Tom Lane、Josh Berkus、Bruce Momjian、Hiroshi Inoue和Peter Eisentraut,還包括2006年‘PostgreSQL周年紀念峰會’上的一些人:Magnus Hagander、Stephen Frost等。”文章原作者回憶說。
總之,每個參與進Postgres的人都對它的前景非常看好,認為這里蘊含著巨大的市場機遇,開源數據庫的浪潮也正開始達到巔峰。
三、Postgres繼續(xù)成熟
進入21世紀后期,Postgres已經成為一個相當可靠的數據庫了。
有了更豐富的資金支持、更廣泛的SQL支持,以及WAL和VACUUM的改進,Postgres變得更值得信賴,但在易用性方面仍有需要改進之處!
多種不同的功能開始組合,包括:
- 并發(fā)索引創(chuàng)建
- 服務器熱備
- 查詢語言改進
- 所有數據類型
- 二階段提交
四、更豐富的體系
之后,更多的SQL支持和更佳的性能將Postgres塑造成了新型數據庫,具有可擴展的數據庫類型。
“我認為,強大的報告功能真正改變了Postgres的游戲規(guī)則;2009年,Postgres 8.4中又出現了窗口函數和公用表達式(CTEs)。有了這些功能的加持,我再也不會回頭看其它數據庫了。”原作者在文章中提到。
奠定了堅實的基礎后,Postgres開始在更廣泛的數據生態(tài)系統(tǒng)中留下印記。由于其堅實的代碼基礎以及許可,許多公司選擇Postgres并開始對其進行“分叉”。
21世紀初期到后期,大多數公司做的第一件事就是向Postgres中添加MPP,使其更多關注聯機分析處理(OLAP)的工作負載。而將MPP與窗口函數和公用表達式(CTEs)之類的功能結合在一起時,開發(fā)者能獲得全新而強大的系統(tǒng),無需從頭開始構建。
這種新型數據庫的出現意味著數據庫成熟所需時間縮短了數年。許多最初的分支如今已消失不在了,但有些仍存在于其它的產品中。盡管有些Postgres分支已被擴散,但Postgres始終沒有停止前進的腳步。
五、2010年:Postgres 9.0和9.1
2010年,Postgres開始變酷!
由于老式關系數據庫不支持listen/notify(從數據庫發(fā)布到訂閱)和hstore(鍵/值數據類型)功能,Postgres 9.0和9.1出現了,支持pg_upgrade,這使升級變得更容易了。此外,隨著GIN和GiST索引的出現,開發(fā)者所能獲得的不再僅是標準B-Tree索引。
這之后,Postgres一直都在擴展、重構了集成過程,用戶可以更容易地使用這些擴展。
六、2012-2014:從假JSON到真JSON
自始至終,開發(fā)人員都在尋求不同的數據處理方式。Postgres聽取了他們的意見,但后來在JSON方面作弊了。2012年,在9.2版本中出現JSON驗證,但這并不是真正的JSON。實際上,幾年后,Postgres才會真正支持JSON。
但這并沒有阻止人們持續(xù)關注Postgres;2014年,真正的JSON出現。
Postgres 9.3非常棒,有橫向連接、可更新的外表、校驗和等。在Postgres 9.4中,JSONB數據類型中能獲得更好的JSON。這意味著,你能更輕松地對數據進行索引,而不必對特定JSON函數索引。
七、2016:Postgre9.5、9.6、10
之后,Postgre在2016年改進了性能,推出9.5、9.6、10版本還持續(xù)增強了現有特性。JSONB不僅開始支持內聯更新,還提升了并行性,其它亮點包括:
1.行級安全性
又名“RLS”,允許數據庫管理員決定用戶是否能夠根據策略查看或操作表中的特定數據行,是在PostgreSQL 9.5中引入的,為PostgreSQL用戶又增添了一層安全保障。
2.邏輯數據復制
邏輯復制從Postgres 10就開始出現了,它是一個復制工具,會將部分或全部數據復制到新的位置,并繼續(xù)從主源更新數據。數據的精確副本會被保存于不同的位置。
八、用戶眼中的PostgresSQL VS MySQL
在Reddit社區(qū)的評論上,用戶對于選擇PostgresSQL還是MySQL展開了激烈的討論。
前幾年,MySQL一直霸占著數據庫榜首;但隨著時間的流逝,PostgresSQL憑借上述強大的功能逐漸超越了MySQL,以45.6%的比例位列排行榜第一。
圖片
不僅如此,Postgres憑借其獨有的先進性逐漸成為了開發(fā)者心目中最受歡迎的開源數據庫之一,助力實現數據現代化!
總結下,為什么用戶如此認可Postgres呢?因為Postgres更可靠和安全、功能極其豐富、沒有鎖定;它不僅僅是一個“數據庫”,更是一個數據平臺!
圖片
在Reddit上的其它評論中,我們發(fā)現,其實,PostgresSQL的日益流行是在它成為大多數主流開發(fā)人員的首選之時。
圖片
“使用PostgresSQL并不意味著你需要放棄SQLite”,一位用戶發(fā)表評論說。