程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MariaDB 新版本實力逆襲不僅僅是 MySQL 替代品,mariadbmysql

MariaDB 新版本實力逆襲不僅僅是 MySQL 替代品,mariadbmysql

編輯:MySQL綜合教程

MariaDB 新版本實力逆襲不僅僅是 MySQL 替代品,mariadbmysql


MySQL分支——MariaDB

MariaDB是MySQL源代碼的一個分支,主要由開源社區在維護,采用GPL授權許可。開發這個分支的原因之一是:甲骨文公司收購了MySQL後,有將MySQL閉源的潛在風險,因此社區采用分支的方式來避開這個風險。MariaDB是完全兼容MySQL,包括API和命令行,使之能輕松成為MySQL的代替品。在存儲引擎方面,使用XtraDB來代替MySQL的InnoDB,XtraDB完全兼容InnoDB,創建一個InnoDB表內部默認會轉換成XtraDB。

Percona XtraDB 是 InnoDB 存儲引擎的增強版,用來更好地發揮最新的計算機硬件系統性能,同時還包含一些在高性能環境下的新特性。XtraDB 存儲引擎是完全的向下兼容,在 MariaDB 中,XtraDB 存儲引擎被標識為"ENGINE=InnoDB",這與 InnoDB 是一樣的,所以可以直接用XtraDB 替換掉 InnoDB,而不會產生任何問題。XtraDB 在 InnoDB 的基礎上構建,使 XtraDB 具有更多的特性,更多的參數指標和更多的擴展。從實踐的角度來看,XtraDB 在CPU多核的條件下更有效的使用內存,並且性能更高。從 MariaDB 5.1 開始就默認使用 XtraDB 存儲引擎。

MariaDB由MySQL的創始人Michael (Monty) Widenius主導開發,他早前曾以10億美元的價格,將自己創建的公司MySQL AB賣給了SUN,此後,隨著SUN被甲骨文收購,MySQL的所有權也落入Oracle的手中。MariaDB名稱來自Michael (Monty) Widenius的女兒Maria的名字。

一、MariaDB 10.0和MySQL 5.6的不同之處

MySQL 5.6 的代碼庫的文件結構已經被改動了。比如單個代碼文件已經被分成多個,又或者是某些代碼已經被重新歸類到了不同的文件內。所以要把MariaDB 去配合現在這個文件結構一定是一個非常消耗時間的過程。

MairaDB 5.5 已經有大量的代碼不同於MySQL 5.5 的版本,而且也有很多的新的特征被整合到MariaDB 5.5 中,而這些特征直到 5.6 版本才出現在MySQL中。所以在比較同樣功能的MySQL和MariaDB的版本,同時在完成設計和QA方面的審核後,一個很明顯的結論是MariaDB會是一個更好的產品。在大多數情況下,在選擇 MariaDB的時候,人們會更多地考慮到功能方面的偏好。

MariaDB不僅僅是MySQL的一個替代品。它的主要目的是創新和提高MySQL的技術,MySQL5.6不是一個合適的創新基礎平台,所以MariaDB團隊就做了下面的事情:

引入了一些新功能(像Multi-source Replication多源復制,基於表的並行復制,Galera Cluster集群,Spider水平分片存儲引擎,TokuDB存儲引擎等),所以需要搞個新版本。

下個版本稱作“MariaDB5.6”是不准確的,因為它不是基於MySQL5.6的,取而代之,MariaDB團隊決定版本號調為10.0。

MariaDB和Percona有什麼不同呢?

Percona是僅僅針對InnoDB引擎上做了性能上的改善(稱為XtraDB),而MariaDB在集成了XtraDB存儲引擎之外,還集成了更多的存儲引擎,包括Aria、SphinxSE、TokuDB、Cassandra、CONNECT、SEQUENCE及Spider存儲引擎等,並且在服務器層上做了大量改進,增加了多源復制和基於表的並行復制等。

二、MariaDB和MySQL的兼容性

MariaDB跟MySQL在絕大多數方面是兼容的,對於前端應用(比如PHP、Perl、Python、Java、.NET、MyODBC、Ruby、MySQL C connector)來說,幾乎感覺不到任何不同。目前MariaDB是發展最快的MySQL分支版本,新版本的發布速度已經超過了Oracle官方的MySQL版本。

注:MariaDB10.0/10.1的GTID復制跟MySQL5.6不兼容。

在Oracle控制下的MySQL開發,有兩個主要問題:

MySQL核心開發團隊是封閉的,完全沒有Oracle之外的成員參加。很多高手即使有心做貢獻,也沒辦法做到。

MySQL新版本的發布速度,在Oracle收購Sun之後大為減緩。

Michael (Monty) Widenius有一個PPT,用數據比較了收購之前和之後新版本的發布速度,並表示有很多bugfix和新的feature,都沒有及時加入到發布版本之中。

以上這兩個問題,導致了各個大公司,都開發了自己定制的MySQL版本,包括Yahoo!、Facebook、Google、阿裡巴巴和淘寶網等。MySQL是開源社區的資產,任何個人/組織都無權據為己有。為了更快速地發展MySQL,另外開分支是必須的。

三、MariaDB 10.0新增的功能

更多的存儲引擎

除了包含標准的MyISAM、BLACKHOLE、CSV、MEMORY、ARCHIVE和MERGE等存儲引擎外,MariaDB的源代碼包和二進制包還包含以下額外的存儲引擎:

Aria(增強版的MyISAM)
XtraDB(增強版的InnoDB)
FederatedX
OQGRAPH
SphinxSE[1]
IBMDB2I
TokuDB[2]
Cassandra
CONNECT
SEQUENCE
Spider[3]
PBXT

速度提升

在MariaDB5.3版本裡,就已經對子查詢進行了優化,並采用semi join半連接方式將SQL改寫為了表關聯join,從而提高了查詢速度。

在MariaDB5.3版本裡,引入了Group commit for the binary log組提交技術,簡單的說,多個並發提交的事務加入一個隊列裡,對這個隊列裡的事務,利用一次I/O合並提交,從而解決了寫日志頻繁刷磁盤的問題。

在MariaDB10.0版本裡,引入了基於表的多線程並行復制技術,如果主庫上1秒內有10個事務,那麼合並一個I/O提交一次,並在binlog裡增加一個cid = XX 標記,當cid的值是一樣時,Slave就可以進行並行復制,通過設置多個sql_thread線程實現。在MySQL5.5版本裡是單進程串行復制,通過sql_thread線程來恢復主庫推送過來的binlog,這樣會產生一個問題,主庫上大量的寫操作,從庫就有可能會出現延遲。在MySQL5.6是基於庫級別的並行復制,MySQL5.7是基於表級別的並行復制。

在MariaDB5.5版本裡,引入了線程池thread pool技術,線程池的連接復用,減少了建立連接的開銷,減少了CPU上下文切換,非常適合高並發php短連接應用場景(例如使用開源電商平台ECSHOP秒殺業務場景)。

在處理內部的臨時表,MariaDB用Aria引擎代替了MyISAM引擎,這將使某些GROUP BY和DISTINCT請求速度更快,因為Aria有比MyISAM更好的緩存機制。

擴展和新功能

時間精確到微秒級別

提供了虛擬列(函數索引)

在MariaDB5.2版本裡,就已經提供了虛擬列(函數索引),但直到MySQL5.7版本才支持。

kill命令擴展

在MariaDB5.3版本裡,又對kill命令進行了擴展,可以指定某個user用戶,殺死所有查詢

修改表結構可顯示執行進度

提供了動態列(可以存儲JSON格式)

在MariaDB5.3版本裡,就已經提供了動態列(可以存儲JSON格式),但直到MySQL5.7版本才支持。

提供了多源復制,但直到MySQL5.7版本才支持。

支持GTID同步復制。

創建了用戶支持創建角色role權限。

通過show processlist可以查看內存占用。

執行create or replace table 等於先執行drop操作,再執行create操作。

執行delete from table returning命令可刪除前返回刪除的記錄。

慢查詢日志slow log裡增加了explain執行計劃。

四、總結

MariaDB是甲骨文MySQL的加強版本,因此已有的系統不需要任何修改就可以運行,就像使用Percona Server一樣。

MariaDB社區版和企業版的源代碼都是開源的,並且所有功能都是免費開放,不用擔心功能上有閹割,但甲骨文MySQL企業版延伸套件采取封閉源代碼且需要付費。此外,MariaDB相比MySQL擁有更多的功能、更快、更穩定、BUG修復更快。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved