在看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 BYDISTINCT请求速度更快,因为Aria有比MyISAM更好的缓冲机制.包含Aria是MariaDB 5.1和MySQL 5.1之间的一个不同.

There are also some new options to CREATE TABLE:

    • TRANSACTIONAL= 0 | 1 : Transactional means crash-safe for Aria
    • PAGE_CHECKSUM= 0 | 1 : If index and data should use page checksums for extra safety.
    • TABLE_CHECKSUM= 0 | 1 : Same as CHECKSUM in MySQL 5.1
    • ROW_FORMAT=PAGE : The new cacheable row format for Aria tables. Default row format for Aria tables and only row format that can be used if TRANSACTIONAL=1. To emulate MyISAM, use ROW_FORMAT=FIXED orROW_FORMAT=DYNAMIC
    • CHECKSUM TABLE now ignores values in NULL fields. This makes CHECKSUM 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 an ALTER TABLE. You can use the old ways to calculate checksums by using the option --old to mysqld or set the system variable '@@old' to 1 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 的源码发行中还将包含它的源码,但你需要自行 构建 才能使用。

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 的排序
MariaDB存储引擎小结
引擎引擎 优点 缺点 适用场景 问题思考
Aria        
XtraDB 支持事务

1写入的效率较差
2占用更多的存储空间

需要事务支持的生产环境  
FederatedX 支持分布式系统   需要使用分布式系统的情况

1.和单机相比的读写效率如何?
2.如某个RDBMS故障会发生什么?

SphinxSE  支持全文检索  

需要全文检索的情景
使用前要单独安装

 
MEMORY  读写速度快 1.重启后数据清空
2.占用内存空间
 使用读频繁的基础代码表

可以创建Aria表再通过触发器定入memory表
aria表负责更新,memory表负责读取
重启后通过aria表初始化memory表

MERGE 合并多个同构表进行操作

1.执行效率没有提升
2.本身没有任何约束

如:将数据进行分表存储(表的数
量随时间增长)又需要对这些表
进行聚合操作,这时可以使用merge

感觉只是在使用的时候方便
并没有带来效率的提升
约束完全由基础表控制,这样会在多个表中
产生重复数据
archive  插入速度非常快

1.只支持插入和查找
2.不支持索引

 适用于日志类的,只插入不修改
且查询较少的数据.
 
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顾名思义最适用于存档类的数据

  • 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存储引擎的更多相关文章

  1. MariaDB存储引擎

    MariaDB存储引擎 存储引擎就是指表的类型.数据库的存储引擎决定了表在计算机中的存储方式.存储引擎的概念是MariaDB的特点,而且是一种插入式的存储引擎概念.这决定了MariaDB数据库中的表可 ...

  2. MariaDB 存储引擎一览(官方文档翻译)

    inline-translate.translate { } inline-translate.translate::before, inline-translate.translate::after ...

  3. mariadb的explain分析及InnoDB存储引擎

    id: 当前查询语句中,每个SELECT语句的编号,     id: 1  表示简单类型的查询 复杂类型的查询有三种:简单子查询,用于FROM中的子查询,联合查询:UNION 注意:UNION查询的分 ...

  4. (MariaDB/MySQL)MyISAM存储引擎读、写操作的优先级

    MariaDB/MySQL中使用表级锁的存储引擎(例如MyISAM.Aria(MariaDB对MyISAM引擎的改进,前身是MyISAM))在读(select).写操作(insert.delete.u ...

  5. MariaDB快速选择最适合您的需要的存储引擎

    1.Xtradb和InnoDB是一个很好的通用事物存储引擎.通常不确定选用何种存储引擎时,Xtradb和InnoDB是最佳的选择. 2.MyISAM和Aria,占用空间小,系统之间容易复制.MyISA ...

  6. MySQL/MariaDB数据库的存储引擎

    MySQL/MariaDB数据库的存储引擎 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.MySQL体系结构 连接管理模块: 负责接收远程用户的连接. 线程管理模块: 维护 ...

  7. [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变成默认 ...

  8. MySQL的存储引擎

    MySQL的一个重要特性就是支持插件式存储引擎.其存储引擎接口定义良好,有兴趣的开发者可以通过阅读文档编写自己的存储引擎. 接下来简单介绍一下MySQL的常见存储引擎: 一.MyISAM MySQL ...

  9. mysql不同版本和存储引擎选型的验证

    Mysql的版本和存储引擎较多,为了选择最适合业务使用的系统,需要进行一定的验证,本文描述mysql的验证过程和思路. 主要涉及: Mysql的版本 v Mariadb v Tokudb v Orac ...

随机推荐

  1. BZOJ2661 连连看 (费用流)

    把所有点拆成两个,将符合条件的两个点x,y连上边,流量为1,费用为-(x+y). 做一遍最小费用最大流,最后ans div 2即可. Program bzoj2661; ; ..] of longin ...

  2. Unity3D ShaderLab 各向异性高光

    Unity3D ShaderLab 各向异性高光 各向异性时一种模拟物体表面沟槽方向性的高光反射类型,它会修改或延伸垂直方向上的高光.当我们想模拟金属拉丝高光的时候,它非常适合.下面就一步一步实现. ...

  3. windows系统mysql定时自动备份

    MySQL Administrator 工具是MySQL官方的数据库管理工具,包含在MySQL GUI Tools中,可在MySQL官方网站下载到,下载地址:http://dev.mysql.com/ ...

  4. 重学STM32----(一)

    在这学习stm32半年的时间中,虽然明显的感觉到自己在进步,但是还是发现学习方法的错误.由于急功近利的性格,在学习stm32之初,我选择了最简单的办法,用库函数来写程序,而且也由于我这急功近利的性格, ...

  5. Android 学习第1课,JDK工具包的安装

    1. jdk 的下载 目前为止,jdk的最新版是jdk8,http://www.oracle.com/technetwork/java/javase/downloads/index.html 到这里下 ...

  6. iptables导致数据包过多时连接失败

    前几天做服务器压力测试,本地10个线程不停的去向服务器建立连接,然后请求数据,然后连接再关闭,程序每运行几万次之后就会发现客户端程序没办法connect服务器,connect超时. 一开始怀疑是自己服 ...

  7. PostgreSQL高可用性、负载均衡、复制与集群方案介绍

    目录[-] 一.高可用性.负载均衡.复制的几个方案比较: 二.多节点集群方案比较 9.3官方文档(中文):http://58.58.27.50:8079/doc/html/9.3.1_zh/high- ...

  8. R6010 -abort() has been called

    版权所有,转载请注明出处. R6010 -abort() has been called 环境: Windows7 旗舰版 64Bit Visual studio 2012 编译32Bit运行程序 E ...

  9. Qt之qSetMessagePattern

    简述 改变默认的消息处理输出. 允许改变qDebug().qWarning().qCritical().qFatal()的输出. 简述 占位符 示例 qSetMessagePattern QT_MES ...

  10. 【转】ChainMapper 实例理解一

    通过ChainMapper可以将多个map类合并成一个map任务. 下面个这个例子没什么实际意思,但是很好的演示了ChainMapper的作用. 源文件100 tom 90101 mary 85102 ...