内存数据库技术

很多年前就接触过基于Java的内存数据库(In Memory Database),由于数据放在内存中计算,不但可以节省磁盘I/O开销,而且可以用哈希取代B+树建立索引,与传统数据库管理系统而言效率自然要高出一个数量级。同时,使用这些基于Java的内存数据库仅仅需要引用一个jar包,非常适合小规模数据应用以及快速原型系统实现。

下面是我使用过的一些产品以及感受:

  • HSQLDB – HSQLDB是一个开源免费的纯Java数据库,与ANSI-92 SQL兼容得不错,速度非常快,而且同时支持嵌入式和C/S模式。如果没有弄错的话,HSQLDB还被OpenOffice采用。主页:http://hsqldb.org/。
  • H2 – 个人觉得这是HSQLDB的一个重写,经过不完全测试要比HSQLDB更快,开源免费,同时支持嵌入式、C/S模式以及阵列模式,仅仅占用1M左右的内存。此外,H2还很贴心地提供了一个很小的基于Applet的SQL工具。在我的使用过程中,感觉H2与HSQLDB一样对SQL 92支持得很不错。主页:http://www.h2database.com/。
  • Apache Derby – 源自IBM的数据库,与HSQLDB和H2想比,主要感觉速度慢,而且对SQL 92的兼容性不佳,个别被MySQL支持的语句都无法顺利在Derby上执行。虽然如此,Derby被捐献到Apache基金后,相信会有更大的作为吧。主页:http://db.apache.org/derby/。

内存数据库纵然好处种种,但是当时主流数据库厂商主要关注于数据规模以及数据类型的竞争,内存模型并没有太大吸引力。还清晰记得记得当时我在一个项目中即想利用DB2成熟的关系模型、又想利用内存装载所有数据而提高效率,满街找DB2中类似的开关却一无所获……

随着时间的推移,内存数据库又慢慢被主流数据库软件商所重视。原因很简单:

  1. 如今的在线信用卡交易处理以及在线博弈等应用对事物处理的并发要求已经到了令人发指的程度,针对磁盘I/O而设计并且优化的传统数据库自然力不从心。
  2. 遵循摩尔定律的CPU计算能力,以及变成白菜价的RAM,把数据放在内存中离开CPU更近,并不会增加太多成本。
  3. 融合列存储数据库技术,同时提供了OLTP和OLAP的功能。

最近比较火爆的就属SQL Server的Hekaton,以及SAP的HANA了。HANA是SAP家族中的新贵(很贵的贵),没法一亲芳泽;相对的,Hekaton将放在SQL Server 2014中半卖半送,而且还与现有的SQL Serve管理工具兼容,自然方便研究。有意思的是,微软这种把高科技当白菜卖的做法惹恼了SAP,两者之间你来我往口诛笔伐,想看热闹的猛戳谷歌或者必应。

根据微软TechEd 2013中发布的Microsoft SQL Server In-Memory OLTP: Overview of Project “Hekaton”演讲,Hekaton的价值主张如下所示:

可见,主流商业数据库加入基于内存的OLTP特性,并且完善对已有的管理工具的兼容,对延续数据库软件生命周期、平滑过渡到大数据平台都有着深刻的意义。如果没有猜错的话,最近风生水起的MemSQL与MySQL的关系,应该与Hekaton之于SQL Server类似。

其实微软还有其他基于内存的数据技术,有机会再详述。

 



张 琪