MYSQL vs PostgreSQL 的話題應該屬於經久不衰的話題,類似 REDIS VS MONGODB (我比較奇怪這兩個是怎麼被強拉硬拽到一起的)。
偶然晚上翻到一篇國外的BLOG 時間是 2018年9月的文章,正好是一年前。
這篇文章出自 .io ,具體代表什麼,可以XX一下。
這篇文章一開始就將國外使用 MYSQL 和 PG 的公司劃分了出來。
PostgreSQL 這邊的陣營有以下公司
Apple IMDB Macworld , Debian Fujitsu , Red Hat , Sun Microsystem
Cisco , Skype ( 請不要懷疑現在還有沒有Sun Microsystem 以及這篇英文的文章的時間,我已經查過了)
MySQL 這邊有以下一些公司
GitHub , NASA ,Facebook ,Twitter, YouTube ,Tesla
從上邊的兩邊使用不同數據庫的公司對比,很清晰的看出,大部分傳統的公司,大多選擇了 PostgreSQL , 大部分互聯網類似的公司使用了 MySQL
在這樣的開場白後,文章開始從數據庫的結構開始闡述兩種數據庫的不同
PG 被定調為對象關係數據庫管理系統(ORDBMS),強調可擴展性和標準遵從性,支持事務性的,具有可更新和物化的視圖、觸發器和外鍵,還支持函數和存儲過程的數據庫。同時強調了,POSTGRESQL 在具備以下的一些功能後,還支持 NOSQL 的功能,並可以提上臺面。
MYSQL 這邊被定調關係數據庫管理系統(RDBMS),同時也是支持事務,視圖,觸發器,外鍵,函數存儲過程並且從MYSQL 5.7 以後也開始支持NOSQL的開源流行的數據庫。
反正看到這裡,我沒有從讀到的信息裡面看到傾向性,或是一開頭就看出是哪個公司的X文。
文章下面就開始了各種比較,從以下一些方面
1 索引支持的類型
2 數據複製方式的支持模式
3 數據庫語法的標準性
4 數據引擎方面
這裡在索引類型方面文章提到PG 支持的索引類型較多,數據複製的方式支持的模式也有兩種,MYSQL 截止目前,其實也開始支持兩種複製模式(不過你的升級到 MYSQL 8.017),以及提到了PG 在語法方面的嚴格性。在數據庫引擎層,倒是並未過多提起,其實也都各有千秋,也各有自己的弱點,這裡就不提了,見仁見智。
當然文章最後還是比較公平的,但在最後最後,還是不忘說了一句,PG 正在變得越來越流行並且部分功能比MYSQL 還是要技高一籌的。
當然這篇文字並不是要大家看完之後,拋棄哪個,就使用哪個,我覺得那是不負責任和幼兒園的行為。
從開頭開始,我們就可以看出,如果你是傳統的企業,或者你的業務邏輯比較複雜的情況下,一些公司在數據庫層面的首選可能是 POSTGRESQL,因為到目前為止,你很少聽說有在 MYSQL上面實現很複雜的 存儲過程,函數,以及類似ORACLE 那樣的SQL 的寫法去加載到MYSQL中,當然你可以用程序來實現,(今天不想討論程序層,不是我的強項也讓文字變得更冗長)。而互聯網企業一般可能由於業務簡單,以及需要更靈活的一些架構,並且開發的LEVEL 也比較高,在這些基礎上,大致都在選擇MYSQL 作為基礎數據庫,進行各種分庫。
而從我最近一段時間使用兩種數據庫的過程中,自己也感覺到一些文章中沒有提到的不同,比如開發在問我:
我的這個表設計的時候主鍵的設計要注意什麼,如果是MYSQL 我會很嚴肅的告訴他們一些關於MYSQL 主鍵設計中的一些需要注意的地方,而如果是POSTGRESQL, 則我會持比較開放的態度,基本上不會有特別的要求。(這當然是索引組織表 VS 堆表之間的差異)從設計的角度來看可能POSTGRESQL 對開發人員更加的友好一些,初級的設計人員即使設計的不是特別NICE,也不會出太大的亂子,而MYSQL 則需要設計的人員,一開始(有ORACLE 的表設計的多年的經驗,也不見得特別有用)會要求比較多,例如範式我們是不是要嚴格要求(當然不),以哪種觀點來設計表。
當然先到先得的觀點,MYSQL在目前是佔有上峰,並且在去ORACLE的國內情形下,還能多佔更多的份額。可有些公司的本來使用傳統數據庫好好的,但一換到MYSQL 就開始出問題,誠然是開發人員水平不夠,道航不夠深,還用老方式去設計,造成MYSQL表中充斥了, 大量的 trigger , procedure, 外鍵,這樣設計出來的東西...... ,各種ORACLE 的原來的SQL 照搬到MYSQL 中使用,我也不是沒有見過,一塌糊塗,最後給與MYSQL 一個很差的評語,這本身就是對MYSQL 的不公平,因為你不懂他。
換言,POSTGRESQL需求 在招聘廣告裡面出現的次數越來越多的原因也是,一部分企業吃到了苦頭,在不具備使用MYSQL 的基礎上,硬上,最後各種失敗後的一種迴歸。
其實開源數據庫行業裡面,傳統的數據庫無非就是MYSQL VS POSTGRESQL 那個數據庫更好,這樣的話題不如改成,那個更適合你,這樣的話題更成熟。
例如你的開發人員從未使用過MYSQL 數據庫,並且也不是互聯網企業(大,中廠)訓練過來的,基本上一直用ORACLE 的開發人員,你不如讓他安心的使用POSTGRESQL ,至少你的這個項目不會出現各種針對MYSQL 的怪異設計,或者原來一直維護ORACLE SQL SERVER 這樣傳統數據庫的企業,也就別費勁,趕時髦上MYSQL,先問問如何承受的了互聯網企業那些壓力和各種踩坑,填坑的速度。
O 對了,個人還有對使用這兩個數據庫的一個小看法,POSTGRESQL 如果出現一些功能上的需求,一般去找 extension list 而MYSQL 如果想擴展功能,一般都去找第三方的工具,我想你明白我在說什麼。
以上內容由東方瑞通“深藏功與名的劉老師”供稿,13年專業DBA經驗,曾任互聯網金融公司Senior DBA、500強制藥企業Senior DBA,精通Mysql、PostgreSQL、Mongo DB、SQLServer。
閱讀更多 天津東方瑞通 的文章