mariaDB vs mysql
mariaDB vs mysql
今天遇到一个库使用的是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%的提升。当然我相信不同的场景,不同的语言可能会有不同的性能提升程度。
参考
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
mariaDB vs mysql的更多相关文章
- centos7 高速安装 mariadb(mysql)
从最新版本的linux该系统启动,缺省值是 Mariadb代替mysql! 使用系统自带repos安装非常easy: yum install mariadb mariadb-server system ...
- MariaDB与MySQL在一台服务器同时运行
[root@HE3 ~]#groupadd mariadb -g 513 [root@HE3 ~]#useradd-u 513 -gmariadb -s /sbin/nologin -d /home/ ...
- MariaDB与MySQL
一.MariaDB安装部署 tar zxvf mariadb-5.5.31-linux-x86_64.tar.gz mv mariadb-5.5.31-linux-x86_64 /usr/local/ ...
- MariaDB 和 MySQL 比较
MariaDB.org - Supporting continuity and open collaborationhttps://mariadb.org/ MariaDB 和 MySQL 比较 - ...
- MariaDB MariaDB、MySQL存储过程、游标基础应用举例说明
MariaDB.MySQL存储过程.游标基础应用举例说明 by:授客 QQ:1033553122 测试环境: MariaDB-10.0.19-centos7-x86_64 实践操作: # 创建测试数据 ...
- 数据库对比:选择MariaDB还是MySQL?
作者 | EverSQL 译者 | 无明 这篇文章的目的主要是比较 MySQL 和 MariaDB 之间的主要相似点和不同点.我们将从性能.安全性和主要功能方面对这两个数据库展开对比,并列出在选择数据 ...
- MariaDB与MySQL并存
以下是MariaDB官方文档说明,MariaDB如何安装在已经存在MySQL实例的主机上: https://mariadb.com/kb/en/library/installing-mariadb-a ...
- Buildroot MariaDB替代MySQL
/********************************************************************************* * Buildroot Maria ...
- mariadb或者mysql查看某个库相关的用户授权信息
mariadb或者mysql查看某个库相关的授权信息 SELECT * FROM mysql.Db WHERE Db='DB_NAME';
随机推荐
- 代码审计之SQL注入:BlueCMSv1.6 sp1
Preface 这是一篇纪录关于BlueCMSv1.6 sp1两个SQL注入的审计过程,原文来自代码审计之SQL注入:BlueCMSv1.6 sp1 ,主要纪录一下个人在参考博文复现这两个漏洞经过. ...
- SpringCloud实战-Ribbon客户端负载均衡
前面我们已经完成了注册中心和服务提供者两个基础组件.接着介绍使用Spring Cloud Ribbon在客户端负载均衡的调用服务. ribbon 是一个客户端负载均衡器,可以简单的理解成类似于 ngi ...
- SQL Server中表锁定的原理及解锁演示
有几个朋友留言建议结合例子来演示一下, 上篇已经说过锁的几种类型, 可以利用系统动态视图sys.dm_tran_locks查看到,重要的栏位如下: resource_type 被锁的资源类型(Data ...
- 【转】Python的下划线
原文: 1. Python中的下划线(译文) 2. [转]关于python中带下划线的变量和函数的意义 总结: 1. 单下划线开头.保护变量,不可被其他包导入使用,除非在__all__声明可以显示引用 ...
- Robot framework(RF) 用户关键字
3.6 用户关键字 在Robot Framework 中关键字的创建分两种:系统关键字和用户关键字. 系统关键字是需要通过脚本开发相应的类和方法,从而实现某一逻辑功能. 用户关键字是根据业务的需求利 ...
- Python_检查程序规范
''' 检查Python程序的一些基本规范,例如,运算符两测是否有空格,是否每次只导入一个模块,在不同的功能模块之间是否有空行,注释是否够多,等等 ''' import sys import re d ...
- Mysql中外键的 Cascade ,NO ACTION ,Restrict ,SET NULL
外键约束对子表的含义: 如果在父表中找不到候选键,则不允许在子表上进行insert/update 外键约束对父表的含义: 在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配 ...
- SVG的动态之美-搜狗地铁图重构散记
搜狗地图发布了新版的移动端地铁图,改版初衷是为了用户交互体验的提升以及性能的改善.原版地铁图被用户吐槽最多的是pinch缩放不流畅.无过渡动画.拖拽边界不合理等等,大体上都是交互体验上的问题.实际上原 ...
- tkinter中布局pack、place和grid(八)
tkinter中布局pack.place和grid pack布局 import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuy ...
- 你不知道的JavaScript--Item6 var预解析与函数声明提升(hoist )
1.var 变量预编译 JavaScript 的语法和 C .Java.C# 类似,统称为 C 类语法.有过 C 或 Java 编程经验的同学应该对"先声明.后使用"的规则很熟悉, ...