PostgreSQL是什麼?StackOverflow上開發者最愛和最想要的關係型數據庫
**經常會有人問我PostgreSQL是什麼? **
這個問題不太好回答,因為PostgreSQL除了可以讓你做到幾乎所有其他主流關係型數據庫能做的事情外,還可以做到很多別的數據庫做不到的事情。
如果非要一個簡單直接、便於理解的定義,那麼你可以理解為**一個開源可自由擴充的Oracle**。
盡管這並不是非常準確。因為PostgreSQL對程序員要更友好一些,下圖是來自StackOverflow 2017年的一些統計,參考Developer Survey Results 2017:
如果隻是說關係型數據庫,那麼“StackOverflow年度統計中**開發者最愛和最想要的關係型數據庫**”這個結論不難得出。
而對比其中的最熱門:
你會發現一個有意思的現象:**對你最好的未必是那個大家都知道的**。
PostgreSQL好在哪裏?
在回答了前麵的回答之後,這是更多的人會想問的第二個問題。
而對於這顆滄海遺珠,用一句話其實難以盡述。如果非要總結,可以認為有以下幾點:
-
穩定
PostgreSQL的代碼質量是被很多人認可的,經常會有人笑稱PG的開發者都是處女座。基本上,PG的一個大版本發布,經過三兩個小版本就可以上生產,這是值得為人稱道的一個地方。從PostgreSQL漂亮的commit log就可見一斑,PostgreSQL的COMMIT LOG
而得益於PostgreSQL的多進程架構,一個連接的異常並不影響主進程和其他連接,從而帶來不錯的穩定性。
-
性能
我們內部有些性能上的數據,TPCC的性能測試顯示PostgreSQL的性能與商業數據庫基本在同一個層麵上。
-
豐富
PostgreSQL的豐富性是最值得訴說的地方。因為太豐富了,以至於不知道該如何突出重點。最全麵的例子,可以找 自帶博客外掛光環的 @德哥 。這裏隻列舉幾個我認為比較有意思的幾點(查詢、類型、功能):
-
查詢的豐富
且不說HASH\Merge\NestLoop JOIN,還有遞歸、樹形(connect by)、窗口、rollup\cube\grouping sets、物化視圖、SQL標準等,還有各種全文檢索、規則表達式、模煳查詢、相似度等。在這些之外,最重要的是PostgreSQL強大的基於成本的優化器,結合並行執行(並行掃瞄、並行JOIN等)和多種成本因子,帶來各種各樣豐富靈活高效的查詢支持。
-
類型的豐富
如高精度numeric, 浮點, 自增序列,貨幣,字節流,時間,日期,時間戳,布爾, 枚舉,平麵幾何,立體幾何,多維幾何,地球,PostGIS,網絡,比特流,全 文檢索,UUID,XML,JSON,數組,複合類型,域類型,範圍,樹類型,化 學類型,基因序列,FDW, 大對象, 圖像等。
[PS: 這裏的數組,可以讓用戶像操作JAVA中的數組一樣操作數據庫中的數據,如 item[0][1]即表示二維數組中的一個元素,而item可以作為表的一個字段。]
或者,如果以上不夠滿足,你可以自定義自己的類型(create type),並且可以針對這些類型進行**運算符重載**,比如實現IP類型的加減乘除(其操作定義依賴於具體實現,意思是:你想讓IP的加法是什麼樣子就是什麼樣子)。
另外還有各種索引的類型,如btree, hash, gist, sp-gist, gin, brin , bloom , rum 索引等。你甚至可以為自己定義的類型定製特定的索引和索引掃瞄。
-
功能的豐富
PostgreSQL有一個無與倫比的特性——插件。其利用內核代碼中的Hook,可以讓你在不修改數據庫內核代碼的情況下,自主添加任意功能,如PostGIS、JSON、基因等,都是在插件中做了很多的自定義而又不影響任何內核代碼從而滿足豐富多樣的需求。**而PostgreSQL的插件,不計其數**。
FDW機製更讓你可以在同一個PostgreSQL中像操作本地表一樣訪問其他數據源,如Hadoop、MySQL、Oracle、Mongo等,且不會占用PG的過多資源。**比如我們團隊開發的OSS_FDW就用於實現對OSS的讀寫**。
至於其他的,舉個簡單的例子,PostgreSQL的DDL(如加減字段)是可以在事務中完成的 [PS: PostgreSQL是Catalog-Driven的,DDL的修改基本可以理解為一條記錄的修改]。這一點,相信做業務的同學會有體會。
-
談到與商業數據庫的對比,這裏有一張比較有意思的圖,權作消遣:
可以看得出來,PostgreSQL與很多商業數據庫還是有一定曆史淵源上的,大多是基於System R。
如果覺得不過癮,再來點幹的,**看看PostgreSQL與這些數據庫大廠這些年的恩愛情仇(圖比較大,PG在左邊最上麵那條線,然後連著中間最上麵第二條線)**:
如何開始
業務從一個數據庫遷移到另外一個數據庫,不是一件容易的事。那麼,你是否要考慮一下,在新的業務上嚐試不同的可能?
關於選型,這篇數據庫選型十八摸 之 PostgreSQL - 致 架構師、開發者可能會幫到你。
另外,這裏有PG大神@德哥準備的係列的培訓資料,和PG入門文檔
而更多的資料,在雲棲上搜索”postgresql"即可,這裏是傳送門:更多文章資料
Have fun!
最後更新:2017-04-01 17:04:39