今天遇到一個庫使用的是mariaDB的數據庫版本html
Server version: 10.1.20-MariaDB MariaDB Server
理了一下mariaDB和mysql的關係。mysql
簡要來講,mariaDB是mysql上的分支。首先爲何要有這個分支呢?mysql被oracle收購以後,本來的那些mysql的開發者(MySQL 的聯合創始人兼CEO Michael Widenius)以爲mysql後續的發展之路會受到oracle公司的影響。因此單獨出來,建立了一家公司Monty Program Ab。這個公司從mysql上拉一個分支出來進行開發和維護,命名爲mariaDB。git
mariaDB的github上的項目地址爲:https://github.com/MariaDBgithub
mariaDB的主頁爲:https://mariadb.org/sql
mysql如今最新版本是5.7。mariaDB在5.5以前都兼容了mysql全部的新特性。也就是說,mariaDB是mysql的超集。可是固然mariaDB每次須要同步mysql的新的特性到本身的分支,這個是很是痛苦的事情。可是mariaDB的目標是另外建立一個獨立產品和社區。因此mariaDB建立了10的版本號。從這個版本號開始,mariaDB的特性和功能就愈來愈走向獨立了。數據庫
mariaDB的能夠看做是mysql的超集。mysql有的特性mariaDB都有,可是mariaDB有的功能不必定mysql有。好比Dynamic columns。json
這個功能有點像json,表中有一個字段,能夠存儲key,value格式的數據,而且這個value的數據類型能夠動態定義。這樣,就好像mysql的表擴展了多個動態列。oracle
好比:ide
CREATE TABLE bird_sightings ( sighting_id INT AUTO_INCREMENT KEY, human_id INT, time_seen DATETIME, observations BLOB );
這裏的observations是BLOB類型,能夠存儲key-value的格式。post
INSERT INTO bird_sightings (human_id, time_seen, observations) VALUES (36, NOW(), COLUMN_CREATE( 'wing-shape','rounded', 'wingspan','60', 'bill-shape','all-purpose', 'main-color','orange' ));
看這裏的observations就存儲了四個key-value。
當select的時候
ECT name_first AS 'Birder', DATE_FORMAT(time_seen, '%b %d') AS 'Date', COLUMN_GET(observations, 'wing-shape' AS CHAR) AS 'Wings', COLUMN_GET(observations, 'wingspan' AS INT) AS 'Span (cm)', COLUMN_GET(observations, 'bill-shape' AS CHAR) AS 'Beak' FROM bird_sightings JOIN humans USING(human_id); +---------+--------+---------+-----------+-------------+ | Birder | Date | Wings | Span (cm) | Beak | +---------+--------+---------+-----------+-------------+ | Anahit | Apr 14 | pointed | NULL | all-purpose | | Michael | Apr 14 | rounded | 60 | all-purpose | +---------+--------+---------+-----------+-------------+
這裏的COLUMN_GET有個輸出類型的設置。這一個功能就是mariaDB特有的。感受和postgres裏面的jsonb結構很類似。
mariaDB提供的XtraDB存儲引擎替換InnoDB。XtraDB 是 Percona 開發維護的 InnoDB 威力增強版,整合 Google、Facebook 等公司和 MySQL 社區的補丁。
在性能上,mariaDB的性能有必定程度優於mysql是不爭的事實。好比維基百科就從mysql遷移到mariaDB了。反饋,總的來講,mariaDB會比mysql在qps上有2-10%的提高。固然我相信不一樣的場景,不一樣的語言可能會有不一樣的性能提高程度。
http://radar.oreilly.com/2015/04/dynamic-columns-in-mariadb.html
https://seravo.fi/2015/10-reasons-to-migrate-to-mariadb-if-still-using-mysql
https://softwareengineering.stackexchange.com/questions/120178/whats-the-difference-between-mariadb-and-mysql