今天遇到一个库使用的是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