内存数据库
1. 内存数据库 vs 硬盘数据库
内存数据库以其优越的性能,已逐渐在实时性数据库应用领域崭露头角。顾名思义,传统硬盘数据库是将数据存在永久性硬盘里而内存数据库则是将数据存在主存DRAM中。得益于内存的固有属性,内存数据库获得了超高的读写速度,可以规避文件系统IO瓶颈问题,并能移除cache管理、数据传输等传统架构中的开销需求。相比于硬盘数据库,内存数据库速度提升不止一个数量级。
2. 内存数据库 vs 超高速缓存
超高速缓存能够将硬盘数据库中频繁访问的数据保存在内存中,从而可供快速访问,但其只能加速信息检索,即读数据库,当更新或添加数据等写数据库时,最终仍要访问硬盘。所以,超高速缓存只能提升一小部分数据库应用的性能。
超高速缓存另一缺陷在于其不灵活性。用户只可以设置缓存空间,其中存放的数据是由内置最常访问或最少访问之类的算法自动选择的,用户不能主动指定某些特别重要的数据存放在缓存中,要想将整个数据库都存在缓存中更是天方夜谭。
3. 内存数据库 vs 内存盘
内存盘是一种模拟的盘驱动器,其数据实际存储在RAM内存之中。一个专用程序使应用可以对模拟盘读取-写入数据,就像从磁盘驱动器中读写一样。由于减少了物理硬盘访问,性能得到了提升。将硬盘数据库系统部署在内存盘中,可用于实时性任务,如电信路由通话等。这种架构的数据库,瓶颈仍然在磁盘部分,因为在内存盘工作同时,相当一部分CPU资源要用来处理缓存和文件I/O等进程的开销,尤其当事务记录激活时,复制和传输操作会更多。
4. 内存数据库性能测试
以McObject’s ExtremeDB数据库为例,基准和性能结果引自其官网。
测试平台组成如下:
硬件:Intel Oak Creek Canyon主板,Intel Pentium Dual Core CPU 1407 @ 2.8 GHz处理器,8GB DDR3-1333主存,4 GB DDR3-1333 NVDIMM。
操作系统:Debian Linux 2.6.32.5
内存数据库:McObject eXtremeDB IMDS
磁盘数据库:McObject eXtremeDB Fusion,数据库内核中增加了可选、高度可配置的持续存储装置,允许开发者可以将内存盘和磁盘数据库组合在一起,或者指定为整个磁盘存储。在整体采用内存盘的磁盘数据库测试中,eXtremeDB列出了高速缓存、文件I/O等和磁盘数据库相关的性能结果。
测试分为三种数据库操作:插入、更新、删除。通过循环测试每个操作的性能,一次循环构成了数据库事务,并且记录两次。一次测试的循环次数在20,000到40,000之间。基准应用记录了每毫秒完成的循环次数。
测试结果表明,基于NVDIM的IMDB相对传统的硬盘数据库,包括使用内存盘的数据库系统,速度优势明显。即便采用了最快的固态硬盘PCIE-SSD,磁盘数据库速度还是很低。
图1 性能对比
5. 基于NVDIMM的IMDB
基于内存的存储是易失性的,当掉电时,如果没有备份或者log日志,主存中的记录将会丢失。一些应用要求数据非易失和可恢复,内存数据库供应商可以采用日志记录的方式记录数据库的变化,但日志信息需要保存到硬盘中。如果写数据库,内存数据库相对硬盘数据库的优势就会荡然无存。内存数据库最理想的情形是可以充分利用DRAM的速度优势,在异常掉电或系统崩溃时可以不采用电池而可靠保存数据,这种需求对实时性应用尤为迫切。将NVDIMM和内存数据库结合起来,可以完美解决上述问题。
常规NVDIMM OEM测试时需要重新启动整个测试系统,此次测试中,切断电源时,整个内存数据库都保存了下来,并且在上电后得以恢复。内存数据库能立即回到掉电前状态,并且无需执行额外的指令。由此可以看出,全系统保护方案可以使易失性的内存数据库变得非易失,从而可以在实时性应用中大展身手。