去 IOE,MySQL 完胜 PostgreSQL
前言
上周參加了2015年的中國數(shù)據(jù)庫大會,差不多從第二屆開始就每年都會北京參會,從最早的嘉賓到這次的會場主持人,也算見證了中國數(shù)據(jù)庫大會的發(fā)展吧。記得最早的時候大會只有兩天,分會場也比較小,而現(xiàn)在各種大會變?yōu)榱巳?#xff0c;分會場也越來越細化,贊助商也從以前的出版社演變?yōu)楦鞣N高大上的軟硬件公司,這是主辦方的成功,也是整個數(shù)據(jù)庫從業(yè)人員的驕傲。然而,這次會議討論的最多的依然是去IOE問題,但是原來的主角從MySQL換成了PostgreSQL。在之前的去IOE之MySQL問答系列中,筆者其實已經(jīng)回答過了這部分的問題,然而不可避免的收到了來自PostgreSQL陣營非善意的“攻擊”,故展開這個話題,盡量做到職責內的公正,公平,公開。如果您有任何關于去IOE的問題,請關注微信公眾賬號InsideMySQL并與我聯(lián)系。
PostgreSQL
PostgreSQL官方宣稱的是:“The world’s most advanced open source database”。most advanced我不知道是怎么定義的,因為PosgreSQL還是傳統(tǒng)B+樹索引的數(shù)據(jù)庫,在一些場景下,比如全插入場景,其還是會比其他一些數(shù)據(jù)庫要來得差很多,比如TokuDB,MongoDB。撇開這部分的因素,不得不承認PostgreSQL是最為強大的開源數(shù)據(jù)庫,或許,但是Oracle依然才是最為強大的關系型數(shù)據(jù)庫。PostgreSQL陣營一直標榜自己在優(yōu)化器和Oracle可移植性方面的優(yōu)勢,我想這對比MySQL或許是成立的。然而,如果上述都成立的話,為什么PostgreSQL在裝機量,流行度等指標上上遠遠地被后起之秀MySQL給超越了呢?全球前20大網(wǎng)站完全看不到PostgreSQL的身影呢?在寫本篇文章的時候,我倏地想到了一個類似的問題,業(yè)界公認手機質量最好的Nokia,最終為什么會倒下?
PostgreSQL另一個痛點,我想很多人沒有會意識到的,就是在在線事務(OLTP)方面的性能問題。PostgreSQL在功能方面或許是比較完整的,但是真的要進入到生產(chǎn)環(huán)節(jié),看的不再是簡單的功能,因為大部分用戶都明白日常所使用的僅是數(shù)據(jù)庫提供的20%功能。MySQL 5.7現(xiàn)在已經(jīng)可以輕松達到50W QPS的性能,并支持通過NoSQL接口可以達到100W QPS,這是PostgreSQL為什么沒有能在互聯(lián)網(wǎng)時代站住腳跟的一個重要原因之一。在線事務對性能的要求之苛刻,是普通用戶所無法感知的。
PostgreSQL最大的優(yōu)勢是在線分析的場景,因為其優(yōu)化器對于Join的支持堪稱全面,對于復雜查詢有著良好的支持,從Oracle遷移到PostgreSQL的成本會比較低。基于PostgreSQL的GreenPlum也已經(jīng)開源,因此PostgreSQL目前在這方便是較為領先的。
MySQL
MySQL數(shù)據(jù)庫官方的口號是:“?The world’s most popular open source database.”。對比PostgreSQL,這句話簡直無法攻擊,并且MySQL官方的目標也一直是成為最為流行的數(shù)據(jù)庫。通過互聯(lián)網(wǎng)浪潮,移動互聯(lián)的時代,MySQL是真的做到了。
MySQL的優(yōu)勢是開源與開放性架構,使其擁有有著各種分支版本與存儲引擎可供選擇。除了官方的InnoDB存儲引擎,還有TokuDB,Infobright引擎可在特定場合下進行使用。也正是因為MySQL的開源與開放,使得大量的開發(fā)人員加入到了MySQL的環(huán)抱。MySQL是一個非常成功的開源項目,可能很多人忽略了這個重要的因素。
MySQL被Oracle收購后表現(xiàn)的越來越好,一方面是功能越來越與Oracle數(shù)據(jù)庫接近,很多時候給我的感覺就是開源的Oracle數(shù)據(jù)庫,另一個重要的改進就是bug越來越少,甚至很多遺留了有近10年的bug也已一一修復。官方這樣嚴謹?shù)膽B(tài)度,使得MySQL逐漸站穩(wěn)了并開始蠶食一部分的企業(yè)市場,世界500強的選擇就是最好的證明。
MySQL在性能與流行度上的優(yōu)勢我不想再做過多的筆墨,因為這是任何人都無法回避的事實。MySQL數(shù)據(jù)庫之前被PostgreSQL陣營攻擊就是優(yōu)化器,對于多表JOIN的性能以及不支持Hash Join。然而,很多人沒有意識到,MySQL已經(jīng)在5.6版本支持了MRR(Multi-Range Read),ICP(Index Condition Pushdown),BKA(Batched Key Access )Join這些優(yōu)化,多表的JOIN性能已經(jīng)得到了很大幅度的提升。不能否則,MySQL依然不支持Hash Join,但是這些優(yōu)化的引入已經(jīng)使得MySQL的Join性能提升到了一個新臺階。同時,在在線分析的領域,用戶真的不關心使用Hash Join可以5分鐘出報表,而是用MySQL需要8分鐘,這些時間完全是可以容忍的。然在在線事務領域,0.1的時間都是所不能容忍的。因此,本人在這里呼吁,嘗試升級MySQL到5.6,5.7版本,而不要依然停留在5.1或者5.5版本。
MySQL替換Oracle另一個被詬病的就是沒有Oracle的透明網(wǎng)關(Transparent Gateway)功能,MySQL自帶的Fedorate存儲引擎支持MySQL數(shù)據(jù)庫間的查詢,不支持異構數(shù)據(jù)庫之前的查詢。然而,這個問題已經(jīng)給MariaDB解決,用戶只需要通過Connect存儲引擎,就能達到類似Oracle透明網(wǎng)關的功能。
另外,還有用戶提出MySQL不支持分區(qū)的全局索引,物化視圖等,其實這些都可以通過變通的方法實現(xiàn),這在我的書籍《MySQL技術內幕:InnoDB存儲引擎》與《MySQL技術內幕:SQL編程》都有提及,而且也在網(wǎng)易、淘寶這樣的互聯(lián)網(wǎng)公司使用。
即使官方的MySQL無法滿足你的需求,但是用戶依然有InfoBright與TokuDB存儲引擎的選擇。InfoBright是列存的數(shù)據(jù)庫引擎,非常適用于在線分析領域,這點連PostgreSQL都無法進行匹敵。TokuDB是一種類似LSM數(shù)據(jù)結構的數(shù)據(jù)引擎,在大并發(fā)的插入生產(chǎn)環(huán)境下,其對比各種傳統(tǒng)數(shù)據(jù)庫都有著顯著的優(yōu)勢,即使對比PostgreSQL與Oracle數(shù)據(jù)庫本身。總之,MySQL能夠在各種維度滿足用戶對于數(shù)據(jù)庫的各種需求。
PosgreSQL與MySQL對比,最為關鍵的是整個人才的儲備。看看中國的互聯(lián)網(wǎng)公司基本都已將MySQL數(shù)據(jù)庫作為標配,而PostgreSQL甚至連備胎都無法入選。MySQL在互聯(lián)網(wǎng)行業(yè)積累了大量的高可用架構,分布式架構與災備經(jīng)驗,但是PostgreSQL幾乎為0。再看看圖書市場,PostgreSQL鳳毛菱角,而MySQL則有很好的書籍供DBA,開發(fā)人員,架構師等學習。然即使如此,MySQL離Oracle數(shù)據(jù)庫本身的積累還有很長的路要走。
去IOE
去IOE最早是由淘寶提出,旨在去除IT架構中的IBM小型機,Oracle數(shù)據(jù)庫,EMC存儲。去IE是比較簡單的事情,因為這僅是硬件的替換。另外,X86技術也越來越成熟,穩(wěn)定性與小機的差距不斷縮小。然而去Oracle數(shù)據(jù)庫才是淘寶去IOE的難點與精華所在。整個去Oracle歷時3,4年的時間。其中伴隨著功能內部工程師的質疑,大量Oracle人才的流失,但最終已經(jīng)證明了MySQL數(shù)據(jù)庫替代Oracle的可行性。
筆者高興的是傳統(tǒng)企業(yè)也開始有這樣的“覺悟”開始逐步進行去IOE的嘗試,不管這種嘗試是主動還是被動,但都是值得尊敬的行為。原因在于去Oracle數(shù)據(jù)庫這件事情并不那么簡單。數(shù)據(jù)庫是傳統(tǒng)企業(yè)最為核心的資產(chǎn),任何損失都是不可接受的。而去年銀監(jiān)會的39號文件也堅定了傳統(tǒng)企業(yè)的去IOE決心。
去IOE風潮顯現(xiàn),一大幫的公司開始進入到這個領域,希望借助這陣風來大賺一筆。這點本無可非議,市場與技術相輔相成。然而,有一個非常不好的現(xiàn)象是,很多公司是為了迎合某些領導的需要,而不是真正的為傳統(tǒng)企業(yè)構建面向互聯(lián)網(wǎng)+的安全可控的技術架構。而這其中有著一些不為人知的因素。
首當其沖的是領導們的績效,傳統(tǒng)企業(yè)做事,以績效為導向,這與互聯(lián)網(wǎng)行業(yè)并無不同。但是互聯(lián)網(wǎng)行業(yè)有著技術積累,而且對于技術的選型與轉型有著相當?shù)哪托?#xff0c;從淘寶去Oracle用了3,4年就可以看出。而目前擺在傳統(tǒng)企業(yè)領導面前的現(xiàn)實卻是,39號文件要求各銀行業(yè)金融機構對安全可控信息技術的應用以不低于15%的比例逐年增加,直至2019年達到不低于75%的總體占比。
遇到一些傳統(tǒng)企業(yè)的朋友,領導要求他們用PostgreSQL替換Oracle數(shù)據(jù)庫,原因在于這是“最快”的替換Oracle成本,但是他們站在IT從業(yè)人員的角度來看這件事是不對的,有種敢怒不敢言。當然,這其中也有部分商業(yè)公司在其中推動的關系。但是明白人心里都知道,PostgreSQL國內從業(yè)人員寥寥,之前在中國沒有大規(guī)模的使用經(jīng)驗與架構設計,大多停留在找個文檔折騰下的水平上。所謂“最快”的替換方案僅是因為不用進行存儲過程的移植,如果只是這樣使用PostgreSQL,那么僅是應付上層的文件,而沒有真正領會到文件的精神。更有商業(yè)公司號稱有PostgreSQL的專家,然而非常經(jīng)不起推敲,玩過GreenPlum的就是PostgreSQL專家?而且GreenPlum也僅做研究性質的用途?與專家交流后發(fā)現(xiàn)其對鎖與并發(fā),高可用這塊的掌握更是讓人觸目驚心。
所以筆者一再和身邊的朋友說,去IOE不是一件一蹴而就的事情,需要給MySQL時間,否則這件好事情會像著另一個方向而發(fā)展,甚至重復當年年Sybase替換Oracle的事件發(fā)生。但是好消息是這次的領導們終于開始認識到互聯(lián)網(wǎng)的重要性,理解了安全可控對于一個國家的重要性,而互聯(lián)網(wǎng)公司的成熟經(jīng)驗具有很好的借鑒意義。
總結
MySQL數(shù)據(jù)庫早已不是原來的迷你數(shù)據(jù)庫,其在功能性與性能方面都已經(jīng)大幅提升,隨著SSD的崛起,MySQL數(shù)據(jù)庫已經(jīng)完全可以替換Oracle數(shù)據(jù),而PostgreSQL還需要很長的路要走。但市場是開放的,就像Oracle稱雄的年代,還有DB2,Sybase這樣的數(shù)據(jù)庫與之一較長短。我相信互聯(lián)網(wǎng)時代,依然是百花齊放的年代,沒有誰可以一直占領優(yōu)勢,即便是MySQL也沒有這個能力。
總結
以上是生活随笔為你收集整理的去 IOE,MySQL 完胜 PostgreSQL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RAC环境在ASM上创建表空间出错ORA
- 下一篇: linux cmake编译源码,linu