MySQL数据库存储引擎和分支现状

数据库 MySQL
MySQL数据库是一种开放源代码的关系型数据库管理系统,MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。MySQL随着相应的各主创和内部开发人员的离去,缔造了各个不同的存储引擎和分支,下面分析MySQL数据库存储引擎和分支现状。

 MySQL以前的发展是值得肯定的,发展也是相当成功的,然而,在MySQL经历了2008年Sun的收购和2009年Oracle收购Sun的过程中,MySQL的步伐基本处于停滞发展的情况,在可以预见的未来,MySQL是肯定会被Oracle搁置并且逐步雪藏消灭掉的。MySQL随着相应的各主创和内部开发人员的离去,缔造了各个不同的引擎和分支,让MySQL有希望继续发扬光大起来。

  本文大致讲解一下MySQL目前除了主要的 MyISAM、InnoDB、Heap(Memory)、NDB 等引擎之外的其他引擎的发展和现状,以及MySQL主干以外的分支的状况,为了我们未来更好的使用MySQL或者其他分支建立一个了解基础。

  要了解主要存储引擎,请参考手册:http://dev.mysql.com/doc/refman/5.1/zh/index.html

 

  MySQL存储引擎介绍:

  Falcon存储引擎

  Falcon存储引擎是MySQL当时寄以厚望的存储引擎,主要是为了面对当时Oracle收购了InnoBase公司的情况,用来取代InnoDB的一个存储引擎。Falcon引擎的主导人员是大师Jim Starkey,从2006年开始开发,到2008年发布Beta版本,至今为止也没有走入主流。2008年中旬,Falcon的主架构师Jim Starkey宣布从MySQL公司辞职,加入了一家创业公司NimbusDB担任CEO,去设计和开发运行在云计算上面的关系/语义数据库,按照2010年目前NoSQL市场的发展来看,他的选择是正确的,但是带来的结果是Falcon陷入一个没有主导人员的地步,导致了至今都属于性能糟糕,半死不活的状态。

  Falcon引擎是MySQL AB公司基于Netfrastrucure公司的产品开发的(Netfrastrucure公司被MySQL AB收购),Falcon 当初的目标是嵌入到MySQL 6.0中用来取代InnoDB引擎,基本很多功能设计都是按照InnoDB的目标去设计的。

  Falcon是面向多CPU、拥有大量内存的当代硬件环境和典型Web应用的 数据库操作特点而开发的,主要功能包括多版本并发控制、完善的ACID支持、支持前缀压缩的B+树索引、数据页压缩(在磁盘上以压缩形式存储,在内存中以 非压缩形式存储)、成组提交等。从功能方面来说没有什么新鲜事,大体也就实现了一个事务型存储引擎必须要有的功能(很多高级的功能如多表空间、分区等都还 没有),但其架构上却有很多独特之处。

  通过网上的一些测试结果Falcon的性能还是很糟糕的,写入速度是 MyISAM 的 1/10 ~ 1/20,Select 的优化也有问题,添加了索引感觉还会进行全表扫描。所以,我终究感觉 Falcon 是个杯具的引擎。

  Falcon特性:http://dev.mysql.com/doc/falcon/en/se-falcon-features.html
  Falcon测试:http://blog.gslin.org/archives/2008/02/12/1425/
  Falcon手册:http://dev.mysql.com/doc/falcon/en/

 

#p#

  在MySQL经历了2008年Sun的收购和2009年Oracle收购Sun的过程中,基本处于停滞发展的情况,在可以预见的未来,MySQL是肯定会被Oracle搁置并且逐步雪藏消灭掉的。MySQL随着相应的各主创和内部开发人员的离去,缔造了各个不同的引擎和分支,让MySQL有希望继续发扬光大起来。

  本文大致讲解一下MySQL目前除了主要的 MyISAM、InnoDB、Heap(Memory)、NDB 等引擎之外的其他引擎的发展和现状,以及MySQL主干以外的分支的状况,为了我们未来更好的使用MySQL或者其他分支建立一个了解基础。

  要了解主要存储引擎,请参考手册:http://dev.mysql.com/doc/refman/5.1/zh/index.html

#p#

 Maria存储引擎

  Maria由MySQL的创始人,MyISAM的作者Monty (Michael Widenius) 开发,命名为Maria是因为他的第三个小孩就叫Maria。Maria是Monty在MySQL公司的时候就开始开发的一个MySQL的分支引 擎,Sun收购MySQL后,因为与Sun针对MySQL团队的一些问题不和,然后在2009年初离开了Sun,成立了 Monty Program Ab 公司,专门用于针对 Maria 引擎的开发,同时开发了一个MySQL的分支,叫做 MariaDB。

  Maria是一个MySQL的存储引擎,利用它来扩展MyISAM使之在异常退出时文件不至于损坏。Maria的主要目的是作为更好的 MyISAM,提供崩溃后的故障恢复功能。更长远的目标是成为一个全功能的事务型存储引擎,支持ACID、回滚、多版本并发控制、行级锁、成组提交,同时 也可以选择不支持事务,最终代替MyISAM成为MySQL的默认存储引擎。

  目前Maria引擎有针对MySQL 5.1 的版本,基本上就是一个增加了崩溃恢复功能的MyISAM,使用表级锁,但可以做到读写不冲突,即在进行任何类型的更新操作的同时都可以进行读操作,但多个写操作不能并发。

  Maria的特点

  1. 多版本并发控制,ACID支持

  2. 通过拷贝日志就能进行增强备份

  3. 高效的磁盘存储

  Maria 引擎开发之初就是用来取代MyISAM的存储引擎,并且目前按照我了解有些在使用公司的情况,运行情况挺不错,大家也可以尝试一下。Maria 在目前有MySQL创始人带领的情况下,也是一个非常有前途的的存储引擎,值得期待。

  Maria下载:http://askmonty.org/wiki/MariaDB:Download

  Maria手册:http://askmonty.org/wiki/Maria

  [PrimeBase XT (PBXT) 存储引擎 ]

  PBXT 是 PrimeBase 公司推出的MySQL插件引擎,其功能和 InnoDB 类似,它是一款事务型存储引擎,并且它的设计是很独特的。它的一个很与众不同的特征就是如何来使用事务日志和数据文件来防止“write-ahead”日 志,这可以极大的减少事务提交的开销。这个架构给了PBXT很大的提高写并发的空间,并且测试也表明它在某些特定的操作下比InnoDB要快。PBXT也 使用了MVCC并且支持外键约束,但是它不使用簇索引。

  主要特性如下:

  MVCC的 :多版本并发控制,使读操作没有锁定

  事务性 :支持启动开始,COMMIT和ROLLBACK和恢复上

  ACID标准 :原子性,一致性,隔离,持久(一次提交的更改不能丢失)

  行级锁定 :更新使用行级锁的并发允许***并发量

  死锁检测 :立即通知如果客户端进程已陷入死锁

  参照完整性 :外键的支持。

  写一次 :PBXT避免的架构双写入使用日志。

  BLOB的流 :在结合的 BLOB Streaming engine.。 (http://www.blobstreaming.org/)

  按照有人的测试结果来看,PBXT存储引擎版本的TPS随着线程数的增长,表现比较稳定,性能上与innodb差不多,长期来看,它的目标也是作为 一个能够取代InnoDB的存储引擎。而且目前 MariaDB 这个分支已经把 PBXT 作为内置的存储引擎,所以也是可以尝试使用的一个引擎。

  性能测试:http://imysql.cn/2008_07_25_innodb_vs_pbxt

  引擎下载:http://www.primebase.org/download/index.php

  官方网站:http://www.primebase.org/

 

#p#

MySQL分支介绍:

 MariaDB 数据库:  MariaDB 是一个采用 Maria 存储引擎的 MySQL 分支版本,是由原来 MySQL 的作者 Michael Widenius (Monty) 创办的Monty Program Ab公司所开发的免费开源的数据库服务器。基本上 MariaDB 的历史跟我上面讲的 Maria 存储引擎历史一样。MariaDB的设计目标就是用来取代 MySQL Server。Monty是开源数据库联盟(Open Database Alliance)的发起者,所以 MariaDB 也是开源数据库联盟的成员。

  MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎,它使用了Percona的 XtraDB引擎来替换InnoDB,MariaDB的存储引擎还包括了 PrimeBase XT (PBXT) 和 FederatedX 存储引擎,MariaDB基于GPL 2.0发布。

  Monty Widenius提供了MySQL的分支MariaDB候选版本。MariaDB 5.1完全兼容MySQL 5.1,这个版本早在2008年11月就发布了,增加了很多新的功能和若干个新的补丁程序。开发者称这个候选版本非常稳定。基本上 MySQL,MariaDB 解决了很多问题,例如“pool of threads”功能提供解决多数据连接问题。目前 MariaDB 发布的Release版本是 5.1.44,基本上应该是跟 MySQL 5.1 的版本兼容的。

  MariaDB 基本上名门之后,加上MySQL创始人Monty的实力和号召力,是作为MySQL一个非常好的替代品,前途发展无限,值得我们尝试使用。

  MariaDB中存储引擎介绍:

  Maria: http://askmonty.org/wiki/Maria

  XtraDB:http://www.percona.com/docs/wiki/percona-xtradb:start

  PBXT: http://www.primebase.org/

  FederatedX:https://launchpad.net/federatedx

  MariaDB下载:http://askmonty.org/wiki/MariaDB:Download

  MariaDB网站:http://askmonty.org

   Drizzle 数据库

  Drizzle,是从MySQL衍生出来的一个数据库服务器,一个精简版的MySQL分支,Drizzle项目的宗旨是构建一个“更精练、更轻量、更快 速”的MySQL版本,它的扩展性和易用性与MySQL相当,但为了提高性能和扩展性,它从原来的核心系统里移除了部分功能。 Drizzle 也是开源数据库联盟(Open Database Alliance)成员。

  MySql的架构设计总监Brian Aker在O’Reilly开放源码大会(OSCON)上对Drizzle做了介绍。Drizzle是一个能为某些特定类别的应用提供支持的数据库项目(“what if” project)。Drizzle的设计目标:

  1. Web应用。

  2. 云计算组件。

  3. 没有业务逻辑的数据库(又名存储过程)。

  4. 多核架构。

  Drizzle,一个精简版的MySQL分支,在目前的MySQL代码基本之上,将存储过程、视图、触发器、查询缓存、PREPARE语句等等没什 么必要 的功能从代码中删掉,简化对数据类型和存储引擎的支持,并且进行大胆的重构。最终要实现的目的是将MySQL的代码大大简化,理顺MySQL的架构,改善 MySQL的代码质量,提高系统的稳定性和性能。将更适合 Web应用、云计算组件、没有业务逻辑的数据库(又名存储过程)、多核架构 等业务

  Drizzle的特征有:

  * 基于MySQL 6.0的源码树

  * 无附加库

  * 遵守POSIX

  * 微内核设计

  * 可插拔架构,适用于视图、存储过程、UDF、存储引擎等

  * 跨多个节点的Sharding技术

  * 智能代理

  * 多CPU/多核CPU

  * 优化的字段类型

  * 高效的内存使用

  * 没有内部ACL,使用LDAP/PAM

  * 没有数据库数据格式化

  * 整理有序的Make系统

  * 缺省存储引擎为InnoDB

  * 移除Windows兼容性

#p#

Drizzle 缺省的存储引擎是InnoDB,支持的数据类型更少,基本上设计目标跟 MariaDB 完全不同。MariaDB的设计目标是一个取代MySQL的数据库,而 Drizzle 基本上是一个除了MySQL之外你可以选择的产品,并且基本上设计目标是针对未来的云计算和分布式Web存储的方向去的,目前可能不是太稳定,不适合在运 营环境使用,但是相当的值得期待。

  Drizzle下载:https://launchpad.net/drizzle

  Drizzle网站:http://drizzle.org/

总结语: 基本上来说,目前MySQL还是主流(MyISAM/InnoDB),但是未来发展不可预测,并且有这些除了MySQL之外的选择,也许有一天Oracle把MySQL彻底消灭掉了,但是我们同样还有 MariaDB、Drizzle可以选择,这就是开源的力量。

  对比几个MySQL的存储引擎,Maria 和 XtraDB 是值得大家目前投入逐步使用的行列的,多做一些测试,灰度放亮,获得一个合理结果然后再使用是比较合适的。MySQL的数据库分支来说,MariaDB 也是比较值得尝试使用的,毕竟目前 Drizzle 还不是太成熟稳定,并且不一定适合你所做的业务。我所了解国内部分互联网公司也有在使用 MariaDB 的,并且效果不错,大家也都可以按照自己的情况来使用。

  目前NoSQL运动如火如荼,有些业务更适合采用Key==>Value或这是BigTable类型的数据存储方式,也许MySQL不是*** 的,当然选择最合适存储,也许未来大部分数据库市场会被NoSQL所占领,但是我觉得关系型数据库还是未来几年很重要的存储方式。

  在MySQL被Sun收购,已经Sun被Oracle收购的过程中,整个开源世界都是在翻天覆地的变化,特别是MySQL的命运一直都是所有使用和 热爱开源数据库的人们所关注的,在这些商业竞争中,那些开源斗士(比如 Monty),都通过别的方式,继续发扬了MySQL这种开源数据库。我们长期来看,总会有一些东西会消失,比如 Falcon存储引擎,有些东西会继续发展,比如 MariaDB或Drizzle,但是这些都为开源技术做出了贡献,也为数据库领域增添了色彩。

      MySQL数据库存在的存储引擎和分支问题,相信经过MySQL的努力,一定会一一克服。

【编辑推荐】

  1. MySQL数据库存储引擎的概念与用途
  2. 如何更改在Ubuntu下的MySQL数据库存储位置
  3. MySQL数据库存储引擎详解
责任编辑:迎迎 来源: enet.com.cn
相关推荐

2011-03-01 11:21:11

MySQL数据库存储引擎

2010-05-14 17:44:47

MySQL数据库

2011-08-16 16:22:38

MySQL数据库存储引擎MyISAM

2018-05-14 10:56:36

MySQL数据库存储

2022-08-10 14:03:01

MySQL数据库存储

2017-09-03 15:41:31

数据库存储分布式

2022-09-16 11:33:24

数据库关系

2011-02-25 17:47:44

数据库存储编写

2011-08-01 23:08:33

MySQL存储引擎

2023-01-18 08:25:23

数据库存储类型

2009-05-27 11:01:29

UbuntuMySQL存储

2011-05-17 15:30:27

Oracle数据库ADO

2011-08-15 15:14:54

SQL Server存储过程异常处理

2011-08-05 14:31:04

mysql_conve批量转换MYSQL数据MYISAM

2019-07-23 15:34:29

MySQL存储引擎

2018-06-14 15:05:22

数据库MySQL存储引擎

2018-04-23 09:25:24

MySQL结构存储

2011-05-25 10:13:54

MariaDB

2011-03-04 14:13:02

MySQL数据库
点赞
收藏

51CTO技术栈公众号