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