自从InnoBase被Oracle收购之后,MySQL就开始积极的寻求InnoDB存储引擎的替换品。MySQL采取双管齐下的方针,一方面MySQL积极改善其可热插拔的存储引擎体系结构,并大力协助其它产商将其存储产品移植到MySQL,这方面的例子有SolidDBBrightHouseNitroEDB等;另一方面,MySQL AB公司也在开发一个新的事务型存储引擎,这就是由Jim Starkey主持的Falcon项目。JimStarkey是InterBase项目的发起人,在数据库实现领域也有些名气,是将多版本并发控制技术应用于数据库产品的第一人,也是BLOB数据类型的创始人。

Falcon存储引擎的开发工作已经开展了约一年时间(单指MySQL AB公司收购Netfrastructure后的开发时间,实际上Falcon是基于Netfrastrucure公司的产品开发的,而该产品在市场上已经应用好几年了),目前已经到达了Alpha阶段。Falcon目前还只在一个MySQL5.1的分支版本上开发,因此从官方网站上下载的5.1版本(目前为5.1.14)中尚不包含Falcon,但近日在MySQL5.1的手册中已经悄悄加入了Falcon存储引擎相关内容,相信在不远的将来Falcon将会与广大用户见面。

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

首先,Falcon与其它数据库的存储系统有着完全不同的数据缓存机制。一般的数据库采用的都是页面缓存,但在Falcon中,页面缓存被降到相对次要的位置,更多的数据被缓存在记录缓存中,即缓存的粒度是一个记录而不是记录所在的数据页。同时,记录缓存的替换策略也改用更先进的多代回收机制(估计类似于Java中的多代垃圾回收)而非传统的LRU算法。对于数据访问缺乏集中性(即一个表中所有记录被访问的概率都相同)的应用,这一策略并不会有很好的效果。但对于很多Web应用,数据访问的扭曲性非常明显,如Blog应用中一般只有少量热门Blogger的文章被频繁访问,其它用户的访问则很少会被访问不,同时对所有用户来说,一般新文章和少量热门访问被访问的概率都远大于其余文章。在这一情况下,Falcon中的记录缓存策略就可以保证内存只用来缓存真正需要的记录,而不会像页面缓存那样由于缓存了属于同一页但从来不会被访问的记录而浪费了大量的内在,从而提高内存的利用率。通过记录缓存和页面缓存,Falcon实际上成为了基于磁盘存储的数据库和内存数据库和结合体。

其次,Falcon的多版本实现也很有特点。Falcon的原则是内存中的多版本、外存中的单一版本。即未提交版本只保存在内存中(这不是绝对的,当超大更新事务出现时未提交版本也会被暂时写出到一个特殊的文件中,类似于操作系统中的swap),而在事务提交后才通过一个特殊的线程(称为gopher线程)将新数据更新到外存的数据页中。对索引更新的处理方式也很独特,每个事务对某个索引的所有更新在事务提交之间都会被缓存在一个内存的小索引中,只有在事务提交之后才会被合并到索引的主体中。对于小型事务(一般Web应用产生的事务都很小),这一策略有望大大减少多版本带来的时间和空间开销。

附注: Falcon目前还存在很多限制(有些可能是永久的),主要是不支持可串行化隔离级别和不支持分布式事务。

在Falcon努力要成为MySQL存储引擎明日之星之际,它的创造者Jim Starkey(真正的创始者,因为Falcon的大部分代码都是Jim写的)却决定要离开MySQL公司,自己去干点更有意思的活了。他的继任者Ann Harrison是个女强人(Ann是Jim的老婆,Jim是的白胡子老头)。没有了精神领袖,不知道Falcon的路会不会难走一些,不过Jim很有信心说Falcon一定会大成功的。

一直期待吧,可能Ann更适合领导团队,Jim更适合自己埋头干活呢。

MySQL数据库目前主要的数据库引擎是innodb,但是由于开发innodb的公司innobase Inc已经被Oracle公司收购,因此MySQL公司在三年前启动了新的数据库引擎开发计划,而这个MySQL寄予厚望的数据库引擎就是Falcon。

经过两年半的开发,Falcon数据库引擎现在已经是beta版本了,但是目前的falcon还不是很稳定,在性能测试过程当中经常会出现crash的现象。然而falcon遭受的最大打击还是项目领导人的离去。

Falcon的项目领导人和主架构师Jim Starkey最近宣布从MySQL公司辞职,他将去一家创业公司NimbusDB担任CEO职位。Nimbus公司将设计和开发运行在云计算上面的关系/语义数据库,打破目前已经应用了30 多年的基于磁盘的数据库技术。Nimbus的云计算数据库NimbusDB将被设计为能够通过简单的增加更多的服务器来无限扩展数据库的运算能力,并且支持软件的在线升级,软件和硬件的容错性。

由于Falcon数据库引擎一直进展缓慢,现在又失去了项目领导人,因此Falcon的前景非常看淡。当然也许由于Falcon的失败说不定会催生具有革命意义的NimbusDB,也不失为一件好事。