說到大數據,不得不提的就是阿里巴巴。這家全球領先的電子商務企業,每天處理的數據量是其他任何公司都無法比擬的,它也正在轉型成為一家真正意義上的數據公司——MySQL就是阿里巴巴轉型的重要武器。曾經采訪過阿里的一位數據庫架構師,他認為阿里將開源MySQL的性能達到最佳狀態,超越任何關系型數據庫和NoSQL。
2009年,甲骨文通過收購Sun獲得了MySQL的版權,業界就開始質疑甲骨文的用意,擔心MySQL的未來發展。而甲骨文在收購時就曾表態,會比Sun投入更多的精力來開發MySQL。目前看來,至少MySQL社區版和第三方版本的發展并沒有受到收購的影響,MySQL的商業版本也在持續的改進和更新中。下面筆者將盤點一下甲骨文推出的MySQL 5.6正式版的一些新功能,及其針對大數據時代的改進。
一、MySQL 5.6正式版功能盤點
2013年初,甲骨文發布MySQL 5.6正式版,通過提升MySQL優化診斷來提供更好的查詢執行時間和診斷功能,通過增強InnoDB存儲引擎來提高性能處理量和應用可用性,通過MySQL復制的新功能以提高擴展性和高可用性,并且擁有許多新增強功能,包括地理信息系統、精確的空間操作、增強的IPv6合規性和優化服務器的默認設置。
憑借增強的性能、可擴展性、可靠性和可管理性優勢,MySQL 5.6可幫助用戶滿足最苛刻的網絡、云和嵌入式的應用需求。通過子查詢優化、在線數據定義語言(DDL)操作、NoSQL訪問InnoDB、新的性能架構檢測以及更好的條件處理,MySQL 5.6可極大提高開發人員的靈活性。
四大亮點:
1.通過提升MySQL優化診斷來提供更好的查詢執行時間和診斷功能
·子查詢優化:通過在執行之前優化子查詢來簡化查詢開發。新效率體現在查詢執行時間內,顯著提升結果集的選擇、分類并返回交付。
·新增的指數條件下推(Index Condition Pushdown)和批量密鑰訪問(Batch Key Access)功能可提高選擇查詢量高達280倍。
·增強的優化診斷功能:通過EXPLAIN進行INSERT,UPDATE和DELETE操作。EXPLAIN計劃以JSON格式輸出,提供更精確的優化指標和更好的可讀性,優化跟蹤(Optimizer Traces)可跟蹤優化決策過程。
2.通過增強InnoDB存儲引擎來提高性能處理量和應用可用性
·提升處理和只讀量高達230%:通過InnoDB重構,以盡量減少傳統線程,沖洗和清理互斥沖突和瓶頸,從而在高負重OLTP系統上,實現更好的并發性,進而針對只讀工作負載(2)和處理,顯著提高處理量。
·提高可用性:在線DDL操作可使數據庫管理員添加索引和執行表變更,且應用程序仍可用于更新。
·InnoDB全文搜索:允許開發人員在InnoDB表上,建立全文索引,以表示基于文本的內容,并加快單詞和短語的應用搜索。
·簡單、關鍵值查找:通過熟悉的Memcached API,對InnoDB的靈活NoSQL訪問,提供了InnoDB數據的簡單、關鍵值查找。用戶可實現在同一個數據庫,關鍵值操作和復雜的SQL查詢的“雙贏”效應。
3.通過MySQL復制的新功能以提高擴展性和高可用性
·自我修復功能的復制集群:新增的全球處理識別和使用程序(Global Transaction Identifiers and Utilities)能更方便的實現自動檢測并從故障中恢復。碰撞安全復制功能(Crash-Safe Replication)使二進制日志和從動裝載,在崩潰和恢復復制的情況下,能自動恢復到在復制流的正確位置上,而無需管理員干預。通過自動檢測和警告錯誤,Checksums可跨集群維護數據的完整性。
·高性能復制集群:通過多線程的從動裝置(3),Binlog組提交和基于行復制的優化(Binlog Group Commit and Optimized Row-Based Replication)使復制能力提高了5倍,讓用戶在向外擴展其跨商品系統的工作負載時,能夠最大限度地提高復制性能和效率。.
·時間延遲復制:能防止發生在主機的操作失誤,如意外刪除表格等。
4.增強的性能架構(PERFORMANCE_SCHEMA):新檢測讓用戶能夠更好地監控資源最密集的查詢、對象、用戶和應用程序。也可通過查詢、線程、用戶、主機和對象來實現新匯總統計信息概要。增強功能允許更簡便的默認配置,且只耗費不到5%的成本。
二、MySQL針對大數據的改進
1、NoSQL功能
在甲骨文最新發布的MySQL 5.6正式版中,增加了一些NoSQL特性,即通過Memcached API對InnoDB的靈活NoSQL訪問,提供了InnoDB數據的簡單、關鍵值查找。從此可以看出NoSQL對關系數據庫的確產生了巨大的影響,MySQL的這一舉動可以讓開發人員更加方便的使用NoSQL和關系數據庫。
但有很多技術人員認為MySQL的這一功能略顯雞肋,并不能真正發揮NoSQL的作用。以擴展性為例,NoSQL的一個主要優勢就是橫向擴展(Scale Out)。例如Cassandra能夠簡單透明地在多個機器上進行擴展,它們可以是廉價的硬件組成的集群,而無需購買昂貴的服務器或者SAN存儲。這一點MySQL 5.6是做不到的。
2、支持Hadoop
MySQL團隊最新推出了MySQL Applier for Hadoop(以下簡稱Hadoop Applier),希望解決從非MySQL服務器復制數據的問題。
例如,復制事件中的從服務器可能是一個數據倉庫系統,如Apache Hive,它使用Hadoop分布式文件系統(HDFS)作為數據存儲區。如果你有一個與HDFS相關的Hive元存儲,Hadoop Applier就可以實時填充Hive數據表。數據是從MySQL中以文本文件形式導出到HDFS,然后再填充到Hive。
操作很簡單,只需在Hive運行HiveQL語句'CREATE TABLE',定義表的結構與MySQL相似,然后運行Hadoop Applier即可開始實時復制數據。
在Hadoop Applier之前,還沒有任何工具可以執行實時傳輸。之前的解決方案是通過Apache Sqoop導出數據到HDFS,盡管可以批量傳輸,但是需要經常將結果重復導入以保持數據更新。在進行大量數據傳輸時,其他查詢會變得很慢。且在數據庫較大的情況下,如果只進行了一點更改,Sqoop可能也需要較長時間來加載。
而Hadoop Applier則會讀取二進制日志,只應用MySQL服務器上發生的事件,并插入數據,不需要批量傳輸,操作更快,因此并不影響其他查詢的執行速度。
小結
MySQL是業界最優秀的一款開源關系型數據庫軟件,擁有大批追隨者,他們不僅使用MySQL,也為MySQL社區做貢獻,形成一個良好的生態系統。對于MySQL而言,對NoSQL和Hadoop的支持只能是對大數據時代的一種迎合,對于技術人員的作用不置可否。