(本文于2010.10.01发表在《草根》杂志第四期,LAMP交流超级群(500人):106382633)php
在MySQL经历了2008年Sun的收购和2009年Oracle收购Sun的过程当中,基本处于停滞发展的状况,在能够预见的将来,MySQL是确定会被Oracle搁置而且逐步雪藏消灭掉的。MySQL随着相应的各主创和内部开发人员的离去,缔造了各个不一样的引擎和分支,让MySQL有但愿继续发扬光大起来。
本文大体讲解一下MySQL目前除了主要的 MyISAM、InnoDB、Heap(Memory)、NDB等引擎以外的其余引擎的发展和现状,以及MySQL主干之外的分支的情况,为了咱们将来更好的使用MySQL或者其余分支创建一个了解基础。
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/
SolidDB存储引擎
solidDB存储引擎是由Solid Information Technology(http://www.soliddb.com)开发的,这是一款利用MVCC来实现的事务型存储引擎。它既同时支持悲观和乐观并发控制,这一点其余的存储引擎目前都不支持。solibDB的MySQL版本包括对外键的彻底支持。它在许多方面与InnoDB很类似,好比它使用了簇索引。solidDB还包括一个没有额外开销的在线备份功能。
solidDB公司已经由2008年被IBM收购,主要是用于整合为IBM数据库整合方案的一部分,目前是做为一个前端数据缓存的这么一个角色存在。IBM收购solidDB公司,主要是由于甲骨文在2005年6月收购了Solid Information Technology主要竞争对手TimesTen,为了在内存数据库这块市场上有所依托,因此收购了solidDB公司。
solidDB产品是一个完整的打包程序,包括solidDB存储引擎、MyISAM存储引擎以及MySQL服务器。solidDB与MySQL之间的结合出现于2006年的晚些时候。可是底层的技术以及代码倒是通过了该公司15年的完善。Solid公司保证和支持了整个产品。它是基于GPL协议的,而且提供了一个相似于MySQL服务器形式的商业版本。
性能上来讲,SolidDB for MySQL开源数据库再次被证实可以彻底知足高吞吐量、关键任务级应用对系统性能和可扩展性的要求。
可是就solidDB被IBM收购,MySQL对Oracle收购的状况来看,基本上solidDB for MySQL是一个无法继续被MySQL使用的引擎,因此也是一个杯具的MySQL引擎。
官方网站:http://www.ibm.com/software/data/soliddb/
XtraDB存储引擎
XtraDB存储引擎是percona公司对于innodb存储引擎进行改进增强后的产品,第一个版本发布于2008年末。XtraDB兼容innodb的全部特性,而且在IO性能,锁性能,内存管理等多个方面进行了加强。
Percona是一个MySQL技术咨询公司,他们有一个在MySQL领域颇有名的技术博客叫作Mysql Performance Blog,同时他们编写了一本颇有名的MySQL书叫作《High Performance MySQL》,目前也出版了中文版。他们公司还有一个颇有名的MySQL备份工具叫作XtraBackup。
XtraDB的设计目标也是取代InnoDB做为目标,它是基于InnoDB来作的开发,XtraDB 100%的兼容InnoDB,一般能够认为XtraDB是InnoDB的升级或者替代版本。在性能上来讲,目前XtraDB是很是高的,在大部分状况下也是比较稳定的,值得你尝试使用。一样XtraDB也是将来感受颇有前途的一个存储引擎,值得咱们期待。
性能测试:
http://www.mysqlperformanceblog.com/2009/07/14/performance-improvements-in-percona-5-0-83-and-xtradb/
使用状况:http://www.ningoo.net/html/2009/xtradb_storage_engine.html
引擎介绍:http://www.percona.com/docs/wiki/percona-xtradb:start
引擎下载:http://www.percona.com/percona-builds/Percona-XtraDB/
公司官网:http://www.percona.com
性能博客:http://www.mysqlperformanceblog.com
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引擎有针对MySQL5.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。
按照有人的测试结果来看,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
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基于GPL2.0发布。
Monty Widenius提供了MySQL的分支MariaDB候选版本。MariaDB 5.1彻底兼容MySQL5.1,这个版本早在2008年11月就发布了,增长了不少新的功能和若干个新的补丁程序。开发者称这个候选版本很是稳定。基本上MySQL,MariaDB解决了不少问题,例如“pool of threads”功能提供解决多数据链接问题。目前MariaDB发布的Release版本是5.1.44,基本上应该是跟 MySQL5.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的特征有:
¨ 基于MySQL6.0的源码树
¨ 无附加库
¨ 遵照POSIX
¨ 微内核设计
¨ 可插拔架构,适用于视图、存储过程、UDF、存储引擎等
¨ 跨多个节点的Sharding技术
¨ 智能代理
¨ 多CPU/多核CPU
¨ 优化的字段类型
¨ 高效的内存使用
¨ 没有内部ACL,使用LDAP/PAM
¨ 没有数据库数据格式化
¨ 整理有序的Make系统
¨ 缺省存储引擎为InnoDB
¨ 移除Windows兼容性
Drizzle缺省的存储引擎是InnoDB,支持的数据类型更少,基本上设计目标跟MariaDB彻底不一样。MariaDB的设计目标是一个取代MySQL的数据库,而Drizzle基本上是一个除了MySQL以外你能够选择的产品,而且基本上设计目标是针对将来的云计算和分布式Web存储的方向去的,目前可能不是太稳定,不适合在运营环境使用,可是至关的值得期待。
Drizzle使用:http://database.51cto.com/art/200907/137239.htm
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,可是这些都为开源技术作出了贡献,也为数据库领域增添了色彩。html