MYSQL 與 PG 爲啥非要爭個誰好誰壞呢?
MYSQL 和 PG 是影響力最大的兩個開源關係型數據庫,這些年來圍繞這二者誰更好的問題,一直是十分激烈的。目前的大多數創新的數據庫產品和國產數據庫產品都或多或少地與這兩個數據庫有些淵源。因此也具有把這兩個數據庫分出個高下來的動力。實際上不僅僅在國內,國外 PG 派和 MYSQL 派也經常吵得不可開交。根據 database Journal 的統計,PG 數據庫全球市場佔有率大約爲 15%+,Mysql 的全球市場佔有率大約爲 44%+,在全球佔有率方面 Mysql 絕對領先。不過在美國的最新統計,PG 的市場佔有率高達 33%,反超了 MYSQL 的 31%。我不知道這個數據是不是靠譜,實際上數據庫市場佔有率的國別差異也很大,在英國,MYSQL 以 6.75% 小幅度領先於 PG 的 5.74%。和幾年前的數據對比,雖然全球範圍內 MYSQL 的市場佔有率還遠高於 PG,不過二者的差距在逐漸縮小。
實際上數據庫好壞之爭已經幾十年了,爭來爭去企業選擇數據庫產品最終還是要看應用場景、商務條件與企業的喜好或者說相關決策者的喜好。前兩年在一家互聯網金融公司,他們的 CIO 問我 MYSQL 和 PG 數據庫,該如何選擇。他們以前用 MYSQL 數據庫,數據量大了以後,SQL 編寫就要十分小心,否則容易出現性能問題。而出現過性能問題的 SQL 語句,他們測試了一下,在 PG 上跑出來的性能還可以。因此他們公司內部就有些想把數據庫換成 PG 的想法。
我分析了一下他們的應用場景,確實隨着數據量的增加,一些多表關聯的複雜查詢會出現性能問題,就這一點來說,換 PG 數據庫也說的過去。不過根據他們應用的特點、客戶的運維能力以及他們售後服務的投入,再進行分析。我們最終得出了截然不同的答案,他們還是繼續使用 MYSQL,只是應用開發上設定一些開發規範,避免比較複雜的多表查詢語句。因爲他們銷售的是套裝軟件,總體的研發成本會被大量的用戶攤銷,因此提高軟件質量本身就是日常工作的重點。而他們的客戶在運維方面的能力較弱,每個項目的經費也有限,較難提供比較豐富的支撐服務。使用 MYSQL 可以大幅度降低運維的複雜性,只要教會客戶在系統有問題的時候殺死慢查詢的會話,或者直接殺掉數據庫進程,自動重啓應用就可以解決大部分問題了。如果換成 PG 數據庫,在運維方面將面臨更大的複雜度,其成本遠遠高於在應用上加以優化。
實際上,PG 數據庫和 MYSQL 數據庫從底層設計思想上是完全不同的,MYSQL 數據庫自從誕生以來就是一個簡單易用的關係型數據庫,用於一些數據規模不是很大,業務複雜度不是很複雜的廠家。隨着這些年的發展,MYSQL 已經發展出了 10 多種存儲引擎,通過不同的存儲引擎可以實現各種各樣的業務場景。MYSQL 本身就是一個和應用與應用開發結合的很緊密的數據庫,受到開發人員的喜愛也並不意外。
而 PG 數據庫是一個對象關係型數據庫,是一款真正的從核心就是對象數據庫的數據庫產品。是比 Oracle 這種號稱對象數據庫,實際上只是在關係型數據庫中加入了一些對象支持的數據庫產品還正宗的對象數據庫。正是因爲如此,PG 數據庫略微複雜一些,支持更多的業務種類與開發模式。因此在各種功能支持上,PG 數據庫比 MYSQL 更爲豐富一些,把 Oracle 上開發的應用系統遷移到 PG 上也更容易一些。不過因爲 PG 數據庫的複雜性,也導致了 PG 數據庫的運維和調優也更爲複雜一些。
雖然說二者的出廠默認參數設置的都不太合理,不過如果二者都用默認參數運行,PG 數據庫可能會跑的更流暢一些,因此有些人以此爲依據進行測試對比,得到了 PG 數據庫性能碾壓 MYSQL 的結論,實際上這種比較是極不科學的。如果都是經過了充分調優,二者在相同的硬件配置下做 TPMC 壓測,性能也是比較接近的。
回到選擇數據庫產品本身來說,我們可以根據自己的應用場景,研發團隊的特點,運維團隊的能力,企業以往的歷史積累來選擇項目所使用的數據庫。如果你的開發人員能夠寫出質量比較好的 SQL,那麼選擇 MYSQL 可能會對以後的長期運行有利。如果你的業務確實特別複雜,而開發團隊的 SQL 又寫得特別爛,那麼就別硬撐着用 MYSQL 了,選 PG 可能以後會省心一些。
2012 年的時候,和騰訊的朋友交流,那時候騰訊在一般的交易類應用裏用 MYSQL 數據庫,而在數據集市中使用 PG。我那時候還主要在搞 Oracle,對 MYSQL/PG 的特點不太瞭解。我就問他們,爲什麼這麼選擇,他們也說不出特別的道理,只是說他們公司的系統傳統上都是用 MYSQL,只是數據集市中經常有比較複雜的 SQL 語句,經過對比發現 MYSQL 性能不如 PG,於是他們就在這個領域全部選擇了 PG。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/DvViJXu3SMkSijnboE1Lcg