今天遇到一个库使用的是 mariaDB 的数据库版本
Server version: 10.1.20-MariaDB MariaDB Server
理了一下 mariaDB 和 MySQL 的关系.
分支
简要来说, mariaDB 是 MySQL 上的分支. 首先为什么要有这个分支呢? MySQL 被 oracle 收购之后, 原本的那些 MySQL 的开发者 (MySQL 的联合创始人兼 CEO Michael Widenius) 觉得 MySQL 后续的发展之路会受到 oracle 公司的影响. 所以单独出来, 创建了一家公司 Monty Program Ab. 这个公司从 MySQL 上拉一个分支出来进行开发和维护, 命名为 mariaDB.
mariaDB 的 GitHub 上的项目地址为: https://github.com/MariaDB
mariaDB 的主页为: https://mariadb.org/
MySQL 现在最新版本是 5.7.mariaDB 在 5.5 之前都兼容了 MySQL 所有的新特性. 也就是说, mariaDB 是 MySQL 的超集. 但是当然 mariaDB 每次需要同步 MySQL 的新的特性到自己的分支, 这个是非常痛苦的事情. 但是 mariaDB 的目标是另外创建一个独立产品和社区. 所以 mariaDB 创建了 10 的版本号. 从这个版本号开始, mariaDB 的特性和功能就越来越走向独立了.
功能
mariaDB 的可以看作是 MySQL 的超集. MySQL 有的特性 mariaDB 都有, 但是 mariaDB 有的功能不一定 MySQL 有. 比如 Dynamic columns.
Dynamic columns
这个功能有点像 JSON, 表中有一个字段, 可以存储 key,value 格式的数据, 并且这个 value 的数据类型可以动态定义. 这样, 就好像 MySQL 的表扩展了多个动态列.
比如:
- CREATE TABLE bird_sightings
- (
- sighting_id INT AUTO_INCREMENT KEY,
- human_id INT,
- time_seen DATETIME,
- observations BLOB
- );
这里的 observations 是 BLOB 类型, 可以存储 key-value 的格式.
- 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% 的提升. 当然我相信不同的场景, 不同的语言可能会有不同的性能提升程度.
参考
来源: https://www.cnblogs.com/yjf512/p/10605036.html