论文部分内容阅读
内存数据库所有的数据操作全部在内存中执行,所以内存数据库对于请求的响应速度远远超出了磁盘数据库。但是内存数据库具有掉电丢失数据的缺点,为了保证数据不丢失,内存数据库通过不同的策略将数据备份到磁盘中,此时磁盘就存储日志或者快照备份。而磁盘存储备份,加上引入了I/O操作,整个内存数据库的性能受到极大的影响。近年来出现的非易失性内存(non-volatile memory,简称NVM),不仅读写速度接近DRAM,还具有可字节寻址和数据非易失等特点,所以新兴的非易失性存储器技术提供了通过在NVM上部署Key-value内存数据库(KVDB)来提高性能的机会。但是,目前已经存在的Key-value内存数据库并不能很好的利用NVM的特性。它们普遍在内存中处理数据然后通过底层的文件系统来保存数据镜像,数据库的性能被备份机制和IO操作降低。因此,本文利用新型的非易失性内存,针对Key-value内存数据库的关键技术进行了研究与优化。本文主要进行了如下的技术研究:(1)NVM物理空间的管理。对于空间管理,本文在操作系统内核中进行了空闲链表管理。为了减少系统调用产生的性能损耗,在系统启动时,在用户地址空间进行空间的预分配操作,小粒度的分配全部由预分配的空间来分配管理,大粒度的空间则通过系统调用直接从内核中分配。(2)数据库数据全命中。内存数据库(例如Redis等)都受到内存大小的限制,当物理内存的空间无法存储全部的数据时,类似于Redis这样的内存数据库就会通过删除过期的数据或者一段时间未访问的数据来解决内存不足所带来的影响,再次访问被删除数据时就会出现数据不存在的情况。本文利用NVM大容量的优势,将数据库直接运行在NVM上,不仅保证了数据库的持久化,而且突破了物理内存的限制,使得数据实现了100%的数据命中率。(3)数据交换算法。NVM虽然能保证数据全命中,但是NVM的读写性能低于DRAM,为了能维持原有的数据库性能,本文将NVM作为数据库的持久化介质,DRAM作为数据缓存,将热数据通过交换算法移动到DRAM中,保证了数据库的读写性能不受NVM的影响。本文针对上述提出的技术研究方向,利用开源的内存数据库Redis,实现了基于非易失性内存的Key-value内存数据库FHRedis(Full Hit Redis)。FHRedis将数据库移植到NVM上,新增NVM的空间管理和NVM与DRAM之间的数据交换算法。最后使用Redis-benchmark和自行编码的测试工具进行了性能测试,和基于磁盘的Redis、基于EXT4_DAX的Redis相比,在数据库启动和关闭,以及性能方面都有了显著的提升,另外数据库命中率达到了全命中的效果。