初识MariaDB存储引擎
在看MariaDB的存储引擎之前,可以先了解MySQL存储引擎。
MySQL常用的存储引擎:
- MyISAM存储引擎:是MySQL的默认存储引擎。MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求。
MyISAM表还支持3中不同的存储格式:
1 静态表
2 动态表
3 压缩表
静态表是默认的存储格式,静态表中的字段都是非变长的字段,优点是:存储非常迅速,容易缓存,出现故障容易恢复;缺点是:占用的空间通常比动态表多。(注意: 在存储时,列的宽度不足时,用空格补足,当时在访问的时候并不会得到这些空格)
动态表的字段是变长的,优点是:占用的空间相对较少,但是频繁地更新删除记录会产生碎片,需要定期改善性能,并且出现故障的时候恢复相对比较困难。
压缩表占用磁盘空间小,每个记录是被单独压缩的,所以只有非常小的访问开支。
MyISAM表存储为三个文件:.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)
- InnoDB存储引擎:提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
- MEMORY(heap)存储引擎:memory实际是heap的替代品。使用存在内存中的内容来创建表。每个MEMORY表只实际对应一个磁盘文件(只包含表定义)。
- 优点:MEMORY类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用HASH索引
- 缺点:一旦服务关闭,表中的数据就会丢失掉。其只支持表锁,并发性能较差,并且不支持TEXT和BLOB列类型.存储变长字段(varchar)时是按照定常字段(char)的方式进行的,因此会浪费内存
- 关于该存储引擎的浅析:http://www.jb51.net/article/29039.htm
- MERGE存储引擎:是一组MyISAM表的组合,这些MyISAM表必须结构完全相同。MERGE表本身没有数据,类似于一个视图.对MERGE类型的表进行查询、更新、删除的操作,就是对内部的MyISAM表进行的。似乎看到分区表的影子,但完全是两种不同的东西.
官网说明:https://www.mariadb.com/kb/en/merge/
- archive存储引擎:这种类型只支持select 和 insert语句,而且不支持索引。非常适合存储大量的独立的作为历史记录的数据。Archive拥有高效的插入速度,但其对查询的支持相对较差常,应用于日志记录和聚合分析方面。
- Federated: 将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用
- CSV: 逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。
- BlackHole :黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继
MYSQL 中的部分存储引擎的特性:
Attribute |
MyISAM |
Heap |
BDB |
InnoDB |
Transactions(支持事务) |
No |
No |
Yes |
Yes |
Lock granularity(锁粒度) |
Table |
Table |
Page (8 KB) |
Row |
Storage(存储) |
Split files |
In-memory |
Single file per table |
Tablespace(s) |
Isolation levels(隔离级别) |
None |
None |
Read committed |
All |
Portable format(可移植性) |
Yes |
N/A |
No |
Yes |
Referential integrity(参照完整性,似乎是对外键的支持) |
No |
No |
No |
Yes |
Primary key with data |
No |
No |
Yes |
Yes |
MySQL caches data records |
No |
Yes |
Yes |
Yes |
Availability(支持的版本) |
All versions |
All versions |
MySQL-Max |
All Versions |
MariaDB 与 MySQL 相比较
MariaDB 提供以下特性:
- XtraDB 替换 InnoDB,XtraDB 是 Percona 开发维护的 InnoDB 威力加强版,整合 Google、Facebook 等公司和 MySQL 社区的补丁。
- Aria 存储引擎和 Sphinx 存储引擎
- 基于 Gelera Cluster 的 MariaDB 集群方案
- 多主复制(将在 MariaDB 10.0 实现,由淘宝贡献)
- Cassandra 存储引擎(将在 MariaDB 10.0 实现)
,MariaDB 更强的地方在于:
- Aria(原名Maria) 存储引擎
Aria 存储引擎是默认被编译进MariaDB 5.1里的,并且在mysqld启动的时候就要求同时启动.
另外,内部的磁盘表是Aria表格式而不是MyISAM表格式.这将使某些GROUP BY
和DISTINCT
请求速度更快,因为Aria有比MyISAM更好的缓冲机制.包含Aria是MariaDB 5.1和MySQL 5.1之间的一个不同.
There are also some new options to CREATE TABLE
:
TRANSACTIONAL= 0
: Transactional means crash-safe for Aria|
1PAGE_CHECKSUM= 0
: If index and data should use page checksums for extra safety.|
1TABLE_CHECKSUM= 0
: Same as|
1CHECKSUM
in MySQL 5.1ROW_FORMAT=PAGE
: The new cacheable row format for Aria tables. Default row format for Aria tables and only row format that can be used ifTRANSACTIONAL=1
. To emulate MyISAM, useROW_FORMAT=FIXED
orROW_FORMAT=DYNAMIC
CHECKSUM TABLE
now ignores values in NULL fields. This makesCHECKSUM TABLE
faster and fixes some cases where same table definition could give different checksum values depending on row format. The disadvantage is that the value is now different compared to other MySQL installations. The new checksum calculation is fixed for all table engines that uses the default way to calculate and MyISAM which does the calculation internally. Note: Old MyISAM tables with internal checksum will return the same checksum as before. To fix them to calculate according to new rules you have to do anALTER TABLE
. You can use the old ways to calculate checksums by using the option--old
to mysqld or set the system variable '@@old
' to1
when you doCHECKSUM TABLE ... EXTENDED;
- At startup Aria will check the Aria logs and automatically recover the tables from last checkpoint if mysqld was not taken down correctly.
- PBXT 存储引擎
PBXT 是 MariaDB 附带的一种存储引擎,PBXT 在 MariaDB 的 5.1/5.2/5.3 版本中存在,但从 MariaDB 5.5 开始就不再提供 PBXT 存储引擎,而且以后也将不再提供。
原因是 PBXT 已经不再继续开发了,当然,在 MariaDB 的源码发行中还将包含它的源码,但你需要自行 构建 才能使用。
- XtraDB 存储引擎
Percona XtraDB 是 InnoDB 存储引擎的增强版,被设计用来更好的使用更新计算机硬件系统的性能,同时还包含有一些在高性能环境下的新特性。
XtraDB 存储引擎是完全的向下兼容,在 MariaDB 中,XtraDB 存储引擎被标识为"ENGINE=InnoDB",这个与 InnoDB 是一样的,所以你可以直接用XtraDB 替换掉 InnoDB 而不会产生任何问题。
Percona XtraDB 包含有所有 InnoDB's 健壮性,可依赖的 ACID 兼容设计和高级 MVCC 架构。XtraDB 在 InnoDB 的坚实基础上构建,使 XtraDB 具有更多的特性,更好调用,更多的参数指标和更多的扩展。
从实践的角度来看,XtraDB 被设计用来在多核心的条件下更有效的使用内存和更加方便,更加可用。
新的特性被用来降低 InnoDB 的局限性。
MariaDB 对存储引擎新特性的选择基于用户的需求和现实环境中的真实需求。
- FederatedX 存储引擎 分布式存储
- SphinxSE 存储引擎 用于全文检索
官网介绍:https://www.mariadb.com/kb/en/about-sphinxse/
- 更快的复制查询处理
- 线程池
- 更少的警告和bug
- 运行速度更快
- 多的 Extensions (More index parts, new startup options etc)
- 更好的功能测试
- 数据表消除
- 慢查询日志的扩展统计
- 支持对 Unicode 的排序
引擎引擎 | 优点 | 缺点 | 适用场景 | 问题思考 |
Aria | ||||
XtraDB | 支持事务 |
1写入的效率较差 |
需要事务支持的生产环境 | |
FederatedX | 支持分布式系统 | 需要使用分布式系统的情况 |
1.和单机相比的读写效率如何? |
|
SphinxSE | 支持全文检索 |
需要全文检索的情景 |
||
MEMORY | 读写速度快 | 1.重启后数据清空 2.占用内存空间 |
使用读频繁的基础代码表 |
可以创建Aria表再通过触发器定入memory表 |
MERGE | 合并多个同构表进行操作 |
1.执行效率没有提升 |
如:将数据进行分表存储(表的数 |
感觉只是在使用的时候方便 并没有带来效率的提升 约束完全由基础表控制,这样会在多个表中 产生重复数据 |
archive | 插入速度非常快 |
1.只支持插入和查找 |
适用于日志类的,只插入不修改 且查询较少的数据. |
|
CSV | ||||
BlackHole |
官网的一些建议:
Choosing the right storage engine
- Xtradb and InnoDB is a good general transaction storage engine and usually the best choice if unsure.
--Xtradb and InnoDB 是一种很好的通用事务存储引擎,在无法确定如何选择时,它也许就是一种最佳的选择
- MyISAM and Aria have a small footprint and allow for easy copy between systems. MyISAM is MySQL's oldest storage engine, while Aria is MariaDB's more modern improvement.
--MyISAM and Aria占用的资源比较小,两者是兼容的,可以很容易的在这两个系统间进行迁移 . MyISAM是mysql最古老的存储引擎,而Aria是MariaDB对它的更先进的改进.
- TokuDB is a transactional storage engine which is optimized for workloads that do not fit memory, and provides a good compression ratio.
- MEMORY does not write data on-disk (all rows are lost on crash) and is best-used for read-only caches of data from other tables, or for temporary work areas.
--MEMORY 不写数据到硬盘中(意味着重启将丢失),最适用于缓存其它表中的数据用于只读,或者用于临时工作区
- The Archive storage engine is, unsurprisingly, best used for archiving.
--Archive顾名思义最适用于存档类的数据
- Cassandra is a NoSQL engine.
- CONNECT allows access to different kinds of text files and remote resources as if they were regular MariaDB tables.
- SphinxSE is used as a proxy to run statements on a remote Sphinx database server (mainly useful for advanced fulltext searches).
- Spider uses partitioning to provide data sharding through multiple servers.
- ScaleDB is a commercial storage engine suited for large-scale online transaction processing and data warehousing.
常用的有关存储引擎的操作命令
查看数据库可以支持的存储引擎:
show engines
查看某张表使用的存储引擎
Show create table tablename; //显示表的创建语句,其中包含存储引擎信息ENGINE=XXX
show table status like ‘XXX’\G //显示表的当前状态
创建表时指定:
Create table XXX(
columnName(列名1) type(数据类型) attri(属性设置),
columnName(列名2) type(数据类型) attri(属性设置),
……..) engine = engineName
修改表的存储引擎:
Alter table tableName engine =engineName
初识MariaDB存储引擎的更多相关文章
- MariaDB存储引擎
MariaDB存储引擎 存储引擎就是指表的类型.数据库的存储引擎决定了表在计算机中的存储方式.存储引擎的概念是MariaDB的特点,而且是一种插入式的存储引擎概念.这决定了MariaDB数据库中的表可 ...
- MariaDB 存储引擎一览(官方文档翻译)
inline-translate.translate { } inline-translate.translate::before, inline-translate.translate::after ...
- mariadb的explain分析及InnoDB存储引擎
id: 当前查询语句中,每个SELECT语句的编号, id: 1 表示简单类型的查询 复杂类型的查询有三种:简单子查询,用于FROM中的子查询,联合查询:UNION 注意:UNION查询的分 ...
- (MariaDB/MySQL)MyISAM存储引擎读、写操作的优先级
MariaDB/MySQL中使用表级锁的存储引擎(例如MyISAM.Aria(MariaDB对MyISAM引擎的改进,前身是MyISAM))在读(select).写操作(insert.delete.u ...
- MariaDB快速选择最适合您的需要的存储引擎
1.Xtradb和InnoDB是一个很好的通用事物存储引擎.通常不确定选用何种存储引擎时,Xtradb和InnoDB是最佳的选择. 2.MyISAM和Aria,占用空间小,系统之间容易复制.MyISA ...
- MySQL/MariaDB数据库的存储引擎
MySQL/MariaDB数据库的存储引擎 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL体系结构 连接管理模块: 负责接收远程用户的连接. 线程管理模块: 维护 ...
- [MySQL Reference Manual]14 InnoDB存储引擎
14 InnoDB存储引擎 14 InnoDB存储引擎 14.1 InnoDB说明 14.1.1 InnoDB作为默认存储引擎 14.1.1.1 存储引擎的趋势 14.1.1.2 InnoDB变成默认 ...
- MySQL的存储引擎
MySQL的一个重要特性就是支持插件式存储引擎.其存储引擎接口定义良好,有兴趣的开发者可以通过阅读文档编写自己的存储引擎. 接下来简单介绍一下MySQL的常见存储引擎: 一.MyISAM MySQL ...
- mysql不同版本和存储引擎选型的验证
Mysql的版本和存储引擎较多,为了选择最适合业务使用的系统,需要进行一定的验证,本文描述mysql的验证过程和思路. 主要涉及: Mysql的版本 v Mariadb v Tokudb v Orac ...
随机推荐
- 一个简单的解决方法:word文档打不开,错误提示mso.dll模块错误。
最近电脑Word无故出现故障,无法打开,提示错误信息如下: 问题事件名称: APPCRASH应用程序名: WINWORD.EXE应用程序版本: 11.0.8328.0应用程序时间戳: 4c717ed1 ...
- 转:通过代码理解Asp.net4中的几种ClientIDMode设置.
转:http://www.cnblogs.com/xray2005/archive/2011/07/05/2097881.html 以前我们可以通过ClientID在JavaScript脚本中服务器端 ...
- PowerShell让系统可以执行.ps1文件
.ps1文件是PowerShell写好的脚本文件.在Windows系统中,默认情况下是不允许执行.ps1文件的,那么怎么才能让系统允许执行.ps1文件呢? 什么是“.ps1”文件? 这个是PowerS ...
- Gitlab. Disable user creation on welcome page
Login to your Gitlab > Admin area > settings > Features > remove the check mark "Si ...
- 《深入浅出Node.js》第2章 模块机制
@by Ruth92(转载请注明出处) 第2章 模块机制 JavaScript 先天缺乏的功能:模块. 一.CommonJS 规范: JavaScript 规范的缺陷:1)没有模块系统:2)标准库较少 ...
- maven为不同环境打包(hibernate)-超越昨天的自己系列(6)
超越昨天的自己系列(6) 使用ibatis开发中,耗在dao层的开发时间,调试时间,差错时间,以及适应修改需求的时间太长,导致项目看起来就添删改查,却特别费力. 在项目性能要求不高的情况下,开始寻 ...
- platanus
nohup platanus assemble -o Larrrea -f ../unknown_NoIndex_L000_R1.fastq ../unknown_NoIndex_L000_R2.f ...
- interproscan 的使用和遇到的问题
错误一: 2014-10-08 13:09:32,238 [uk.ac.ebi.interpro.scan.jms.worker.LocalJobQueueListener:193] ERROR - ...
- iPhone不为人知的功能常用技巧,看完后才发现很多用iPhone的人实在是愧对乔布斯! - imsoft.cnblogs
很多人花了四五千买部苹果,结果只用到四五百块钱的普通手机功能. iPhone不为人知的功能,常用技巧: 网上搜集整理的iPhone快捷键操作,虽然表面上iPhone按键只有一个HOME键,大部分操作都 ...
- 2016 ACM/ICPC Asia Regional Dalian Online 1002/HDU 5869
Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...