《MYSQL數據庫MariaDB 新版本實力逆襲不僅僅是 MySQL 替代品》要點:
本文介紹了MYSQL數據庫MariaDB 新版本實力逆襲不僅僅是 MySQL 替代品,希望對您有用。如果有疑問,可以聯系我們。
MYSQL應用MySQL分支――MariaDB
MYSQL應用MariaDB是MySQL源代碼的一個分支,主要由開源社區在維護,采用GPL授權許可.開發這個分支的原因之一是:甲骨文公司收購了MySQL后,有將MySQL閉源的潛在風險,因此社區采用分支的方式來避開這個風險.MariaDB是完全兼容MySQL,包括API和命令行,使之能輕松成為MySQL的代替品.在存儲引擎方面,使用XtraDB來代替MySQL的InnoDB,XtraDB完全兼容InnoDB,創建一個InnoDB表內部默認會轉換成XtraDB.
MYSQL應用Percona XtraDB 是 InnoDB 存儲引擎的增強版,用來更好地發揮最新的計算機硬件系統性能,同時還包含一些在高性能環境下的新特性.XtraDB 存儲引擎是完全的向下兼容,在 MariaDB 中,XtraDB 存儲引擎被標識為"ENGINE=InnoDB",這與 InnoDB 是一樣的,所以可以直接用XtraDB 替換掉 InnoDB,而不會產生任何問題.XtraDB 在 InnoDB 的基礎上構建,使 XtraDB 具有更多的特性,更多的參數指標和更多的擴展.從實踐的角度來看,XtraDB 在CPU多核的條件下更有效的使用內存,并且性能更高.從 MariaDB 5.1 開始就默認使用 XtraDB 存儲引擎.
MYSQL應用MariaDB由MySQL的創始人Michael (Monty) Widenius主導開發,他早前曾以10億美元的價格,將自己創建的公司MySQL AB賣給了SUN,此后,隨著SUN被甲骨文收購,MySQL的所有權也落入Oracle的手中.MariaDB名稱來自Michael (Monty) Widenius的女兒Maria的名字.
MYSQL應用一、MariaDB 10.0和MySQL 5.6的不同之處
MYSQL應用MySQL 5.6 的代碼庫的文件結構已經被改動了.比如單個代碼文件已經被分成多個,又或者是某些代碼已經被重新歸類到了不同的文件內.所以要把MariaDB 去配合現在這個文件結構一定是一個非常消耗時間的過程.
MYSQL應用MairaDB 5.5 已經有大量的代碼不同于MySQL 5.5 的版本,而且也有很多的新的特征被整合到MariaDB 5.5 中,而這些特征直到 5.6 版本才出現在MySQL中.所以在比較同樣功能的MySQL和MariaDB的版本,同時在完成設計和QA方面的審核后,一個很明顯的結論是MariaDB會是一個更好的產品.在大多數情況下,在選擇 MariaDB的時候,人們會更多地考慮到功能方面的偏好.
MYSQL應用MariaDB不僅僅是MySQL的一個替代品.它的主要目的是創新和提高MySQL的技術,MySQL5.6不是一個合適的創新基礎平臺,所以MariaDB團隊就做了下面的事情:
MYSQL應用引入了一些新功能(像Multi-source Replication多源復制,基于表的并行復制,Galera Cluster集群,Spider水平分片存儲引擎,TokuDB存儲引擎等),所以需要搞個新版本.
MYSQL應用下個版本稱作“MariaDB5.6”是不準確的,因為它不是基于MySQL5.6的,取而代之,MariaDB團隊決定版本號調為10.0.
MYSQL應用MariaDB和Percona有什么不同呢?
MYSQL應用Percona是僅僅針對InnoDB引擎上做了性能上的改善(稱為XtraDB),而MariaDB在集成了XtraDB存儲引擎之外,還集成了更多的存儲引擎,包括Aria、SphinxSE、TokuDB、Cassandra、CONNECT、SEQUENCE及Spider存儲引擎等,并且在服務器層上做了大量改進,增加了多源復制和基于表的并行復制等.
MYSQL應用二、MariaDB和MySQL的兼容性
MYSQL應用MariaDB跟MySQL在絕大多數方面是兼容的,對于前端應用(比如PHP、Perl、Python、Java、.NET、MyODBC、Ruby、MySQL C connector)來說,幾乎感覺不到任何不同.目前MariaDB是發展最快的MySQL分支版本,新版本的發布速度已經超過了Oracle官方的MySQL版本.
MYSQL應用注:MariaDB10.0/10.1的GTID復制跟MySQL5.6不兼容.
MYSQL應用在Oracle控制下的MySQL開發,有兩個主要問題:
MYSQL應用MySQL核心開發團隊是封閉的,完全沒有Oracle之外的成員參加.很多高手即使有心做貢獻,也沒辦法做到.
MYSQL應用MySQL新版本的發布速度,在Oracle收購Sun之后大為減緩.
MYSQL應用Michael (Monty) Widenius有一個PPT,用數據比較了收購之前和之后新版本的發布速度,并表示有很多bugfix和新的feature,都沒有及時加入到發布版本之中.
MYSQL應用以上這兩個問題,導致了各個大公司,都開發了自己定制的MySQL版本,包括Yahoo!、Facebook、Google、阿里巴巴和淘寶網等.MySQL是開源社區的資產,任何個人/組織都無權據為己有.為了更快速地發展MySQL,另外開分支是必須的.
MYSQL應用三、MariaDB 10.0新增的功能
MYSQL應用更多的存儲引擎
MYSQL應用除了包含標準的MyISAM、BLACKHOLE、CSV、MEMORY、ARCHIVE和MERGE等存儲引擎外,MariaDB的源代碼包和二進制包還包含以下額外的存儲引擎:
MYSQL應用Aria(增強版的MyISAM)
XtraDB(增強版的InnoDB)
FederatedX
OQGRAPH
SphinxSE[1]
IBMDB2I
TokuDB[2]
Cassandra
CONNECT
SEQUENCE
Spider[3]
PBXT
MYSQL應用速度提升
MYSQL應用在MariaDB5.3版本里,就已經對子查詢進行了優化,并采用semi join半連接方式將SQL改寫為了表關聯join,從而提高了查詢速度.
MYSQL應用在MariaDB5.3版本里,引入了Group commit for the binary log組提交技術,簡單的說,多個并發提交的事務加入一個隊列里,對這個隊列里的事務,利用一次I/O合并提交,從而解決了寫日志頻繁刷磁盤的問題.
MYSQL應用在MariaDB10.0版本里,引入了基于表的多線程并行復制技術,如果主庫上1秒內有10個事務,那么合并一個I/O提交一次,并在binlog里增加一個cid = XX 標記,當cid的值是一樣時,Slave就可以進行并行復制,通過設置多個sql_thread線程實現.在MySQL5.5版本里是單進程串行復制,通過sql_thread線程來恢復主庫推送過來的binlog,這樣會產生一個問題,主庫上大量的寫操作,從庫就有可能會出現延遲.在MySQL5.6是基于庫級別的并行復制,MySQL5.7是基于表級別的并行復制.
MYSQL應用在MariaDB5.5版本里,引入了線程池thread pool技術,線程池的連接復用,減少了建立連接的開銷,減少了CPU上下文切換,非常適合高并發php短連接應用場景(例如使用開源電商平臺ECSHOP秒殺業務場景).
MYSQL應用在處理內部的臨時表,MariaDB用Aria引擎代替了MyISAM引擎,這將使某些GROUP BY和DISTINCT請求速度更快,因為Aria有比MyISAM更好的緩存機制.
MYSQL應用擴展和新功能
MYSQL應用時間精確到微秒級別
MYSQL應用提供了虛擬列(函數索引)
MYSQL應用在MariaDB5.2版本里,就已經提供了虛擬列(函數索引),但直到MySQL5.7版本才支持.
MYSQL應用kill命令擴展
MYSQL應用在MariaDB5.3版本里,又對kill命令進行了擴展,可以指定某個user用戶,殺死所有查詢
MYSQL應用修改表結構可顯示執行進度
MYSQL應用提供了動態列(可以存儲JSON格式)
MYSQL應用在MariaDB5.3版本里,就已經提供了動態列(可以存儲JSON格式),但直到MySQL5.7版本才支持.
MYSQL應用提供了多源復制,但直到MySQL5.7版本才支持.
MYSQL應用支持GTID同步復制.
MYSQL應用創建了用戶支持創建角色role權限.
MYSQL應用通過show processlist可以查看內存占用.
MYSQL應用執行create or replace table 等于先執行drop操作,再執行create操作.
MYSQL應用執行delete from table returning命令可刪除前返回刪除的記錄.
MYSQL應用慢查詢日志slow log里增加了explain執行計劃.
MYSQL應用四、總結
MYSQL應用MariaDB是甲骨文MySQL的加強版本,因此已有的系統不需要任何修改就可以運行,就像使用Percona Server一樣.
MYSQL應用MariaDB社區版和企業版的源代碼都是開源的,并且所有功能都是免費開放,不用擔心功能上有閹割,但甲骨文MySQL企業版延伸套件采取封閉源代碼且需要付費.此外,MariaDB相比MySQL擁有更多的功能、更快、更穩定、BUG修復更快.