作者介紹-陳天舟
首先在全球范圍內(nèi),MySQL 一直是領(lǐng)先于 PostgreSQL (下文簡稱 PG) 的。下圖是 DB-Engines 的趨勢圖,雖然 PG 是近 10 年增長最快的數(shù)據(jù)庫,但 MySQL 依然保持著優(yōu)勢。
再來看一下 Google Trends 過去一年的對比
MySQL 也依然是明顯領(lǐng)先的。而進(jìn)一步看一下地域分布的話
絕大多數(shù)地區(qū)依然是 MySQL 領(lǐng)先,份額對比在 60:40 ~ 70:30 之間;少數(shù)幾個國家如俄羅斯不分伯仲;印度的對比是 85:15;而中國則是達(dá)到了 96:4,也是 Google Trends 上差異最明顯的國家。
筆者從 2009 年左右開始學(xué)習(xí)數(shù)據(jù)庫相關(guān)知識,接觸到了 MySQL 5.1 和 PG 8.x。而深度在工作中使用則是 2013 年,那時加入 Google Cloud SQL 開始維護數(shù)據(jù)庫,MySQL 從 5.5 開始,到之后 2017 年 Cloud SQL 推出了 PG 服務(wù),從 9.6 開始,后來一直同時維護 Google 內(nèi)部的 MySQL 和 PG 分支,也就一直關(guān)注著兩邊的發(fā)展。18 年回國后,進(jìn)一步熟悉了國內(nèi)的生態(tài)。 下面就來嘗試分析一下 MySQL 在中國流行度遙遙領(lǐng)先于 PG 的原因。
Windows
MySQL 在 1998 年就提供了 Windows 版本,而 PostgreSQL 則到了 2005 年才正式推出。之前讀到的原因是 Windows 早期的版本一直無法很好支持 PostgreSQL 的進(jìn)程模型。
上手門檻
MySQL 上手更簡單,舉幾個例子:
連 PG,一定需要指定數(shù)據(jù)庫,而 MySQL 就不需要。psql 大家碰到的問題是嘗試連接時報錯 FATAL Database xxx does not exist。而 mysql 碰到的問題是連接上去后,執(zhí)行查詢再提示 no database selected。
訪問控制的配置,首先 PG 和 MySQL 都有用戶系統(tǒng),但 PG 還要配置一個額外的 pg_hba (host-based authentication) 文件。
MySQL 的層級關(guān)系是:實例 -> 數(shù)據(jù)庫 -> 表,而 PG 的關(guān)系是:實例(也叫集群)> 數(shù)據(jù)庫 > Schema > 表。PG 多了一層,而且從行為表現(xiàn)上,PG 的 schema 類似于 MySQL 數(shù)據(jù)庫,而 PG 的數(shù)據(jù)庫類似于 MySQL 的實例。PG 的這個額外層級在絕大多數(shù)場景是用不到的,大家從習(xí)慣上還是喜歡用數(shù)據(jù)庫作為分割邊界,而不是 schema。所以往往 PG 數(shù)據(jù)庫下,也就一個 public schema,這多出來的一層 schema 就是額外的負(fù)擔(dān)。
因為上面機制的不同,PG 是無法直接做跨庫查詢的,早年要通過 dblink 插件,后來被 FDW (foreign data wrapper) 取代。
PG 有更加全面的權(quán)限體系,數(shù)據(jù)庫對象都有明確的所有者,但這也導(dǎo)致在做測試時,更經(jīng)常碰到權(quán)限問題。
雖然 PostgreSQL 的設(shè)計更加嚴(yán)謹(jǐn),但也更容易把人勸退。就像問卷設(shè)計的一個技巧是第一題放一個無腦就能答上來的二選一,這個的目的在于讓對方開始答題。
性能
最早 Google 搜索和廣告業(yè)務(wù)都是跑在 MySQL 上的,我讀到過當(dāng)時選型的備忘。其實一開始團隊是傾向于 PG 的(我猜測是 PG 的工程質(zhì)量更加符合團隊的技術(shù)品味),但后來測試發(fā)現(xiàn) MySQL 的性能要好不少,所以就選型了 MySQL。 現(xiàn)在兩者的性能對比已經(jīng)完全不一樣了,而且性能和業(yè)務(wù)關(guān)聯(lián)性很強,取決于 SQL 復(fù)雜度,并發(fā),延遲這些不同的組合。目前在大部分場景下,MySQL 和 PG 的性能是相當(dāng)?shù)?。有興趣可以閱讀 Mark Callaghan (https://smalldatum.blogspot.com/) 的文章。
互聯(lián)網(wǎng)
最重要的是 LAMP 技術(shù)棧,Linux + Apache + MySQL + PHP,誕生于 1998 年,和互聯(lián)網(wǎng)崛起同步,LAMP 技術(shù)棧的普及也帶火了 MySQL。這個技術(shù)棧的綁定是如此之深,所以時至今日,MySQL 官方客戶端 MySQL Workbench 也還是不及 phpMyAdmin 流行。
大廠的號召力
前面提到的 Mark Callaghan 一開始在 Google 的 MySQL 團隊,他們給生態(tài)做了很多貢獻(xiàn),后來 Google 內(nèi)部開始用 Spanner 替換 MySQL,Mark 他們就跑到了 Facebook 繼續(xù)做,又進(jìn)一步發(fā)展了 MySQL 的生態(tài),像當(dāng)時互聯(lián)網(wǎng)公司都需要的高可用方案 MHA (Master High Availability) 就是 Mark 在 FB 時期打磨成熟的。當(dāng)時整個互聯(lián)網(wǎng)技術(shù)以 Google 為瞻,傳播鏈差不多是 Google > Facebook / Twitter > 國內(nèi)互聯(lián)網(wǎng)大廠 > 其他中小廠。MySQL 在互聯(lián)網(wǎng)公司的壟斷就這樣形成了。 相對的,那段時間 PG 有影響力的文章不多,我唯一有印象的是 Instagram 分享他們 sharding 的方案,提到用的是 PostgreSQL (https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c)。
生態(tài)
有了大量使用后,自然就有人去解決碰到的各種問題。先是 InnoDB 橫空出世,解決了事務(wù)和性能問題。主從,中間件分庫分表方案解決了海量服務(wù)的擴展和高可用問題。各種 MySQL 相關(guān)書籍,培訓(xùn)資料也冒了出來,應(yīng)該不少人都讀過高性能 MySQL (High Performance MySQL) 這本書。
業(yè)界有 Percona 這樣專注于做 MySQL 技術(shù)咨詢的公司,他們還研發(fā)了一系列工具,比如做大表變更的 pt-online-schema-change(后來 GitHub 還發(fā)布了改良版 gh-ost),做備份的 xtrabackup。 國內(nèi)也做了不少的貢獻(xiàn),阿里給上游貢獻(xiàn)了許多 replication 的改進(jìn)。SQL 審核優(yōu)化這塊,有去哪兒研發(fā)的 Inception,小米團隊的 SOAR。Parser 有 PingCAP 的 MySQL Parser。 相對而言 PG 在工具鏈的生態(tài)還是差不少,比如 PG 生態(tài)里沒有開箱即用的 Parser,沒有 Parser 也就無法做 SQL 審核。Bytebase 在實現(xiàn)相關(guān)功能時,就只能從頭開始做。當(dāng)然這也成為了 Bytebase 產(chǎn)品的核心競爭力,我們是市面上對 PG 變更審核,查詢脫敏支持最好的工具,除了大表變更外,功能完全對標(biāo) MySQL。
總結(jié)和展望
回到中國 MySQL 遠(yuǎn)比 PostgreSQL 流行的原因,在上面所有列出的要素里,我覺得最核心的還是第一條,MySQL 很早就能跑在 Windows 上,而 PG 不能。因為有了能跑 Windows 這個點,MySQL 成為了 LAMP 的一部分,到后來成為了支撐整個互聯(lián)網(wǎng)的基石。當(dāng)時國內(nèi)大家手頭裝的都是 windows 操作系統(tǒng),要開發(fā) web 應(yīng)用,都用 LAMP 架構(gòu),就順便把 MySQL 帶上了。 此外國內(nèi)還有更明顯的頭部效應(yīng)。國內(nèi)所有互聯(lián)網(wǎng)公司的技術(shù)體系都源自阿里,比如拿研發(fā)環(huán)境來說,SIT (System Integration Test) 是我回國加入螞蟻后才接觸到的名詞,但后來在其他各個地方又都反復(fù)遇到。數(shù)據(jù)庫方案也是如此,全套照搬了阿里的 MySQL 方案。就連技術(shù)職級也是,找工作先確認(rèn)對標(biāo) P 幾。
就在上月,MySQL 5.7 宣布了 EOL,算是給 MySQL 5 系,這個支撐了過去 15 年中國互聯(lián)網(wǎng)的功勛做了一個告別。 隨著 MySQL 的辭舊,PG 的崛起,在這 AI 的黎明,VR 的前夜,下一個 15 年,MySQL 和 PG 之間相愛相殺的故事又該會如何演繹呢。
編輯:黃飛
-
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3794瀏覽量
64362 -
MySQL
+關(guān)注
關(guān)注
1文章
804瀏覽量
26533 -
postgresql
+關(guān)注
關(guān)注
0文章
21瀏覽量
211
原文標(biāo)題:為何在中國MySQL遠(yuǎn)比PostgreSQL流行
文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論