论文部分内容阅读
键值存储系统(Key-Value Store)通过允许硬盘上保留多个版本的数据来提供高速的写操作。其中旧版本的数据由键值存储系统提供的压实(Compaction)操作来删除。目前流行的压实方法称为多文件压实(Multi-File Compaction,MFC)。MFC会选取若干个SSTable,压实成一个新的SSTable。在压实过程中MFC会检测并删除旧版本数据。然而MFC存在一些问题:首先,MFC操作会引起大量的I/O开销,这会影响到键值存储系统对用户前端操作的响应;其次,MFC的触发过于盲目,当系统中SSTable的个数达到阈值时MFC就会被触发,并没有真正考虑这些SSTable中是否真的有冗余数据;第三,文件大小相近且相邻的SSTable中的旧数据可以被很好的检测并删除,但是如果SSTable的大小相差很大时,其中的旧数据不容易被处理。 为了解决这些问题,我们为Key-Value Store提出了一种新的、轻量的、智能的压实方案单文件压实(Single-File Compaction,SFC)。首先,SFC通过PUT操作来检测旧值,并将旧值记录在Delete Log中,每个Delete Log对应一个SSTable。检查旧值时利用BloomFilter来减少I/O的开销。利用检测得到的旧值,我们可以知道SSTable中旧值的分布,因此可以智能的选择SFC的触发时机。第二,SFC通过归并SSTable和其对应的DeleteLog来删除旧值。与MFC每次压实多个SSTable不同,SFC每次只对一个SSTable进行压实,这使得SFC变的更加轻量,可以更及时的删除旧值。我们在Apache HBase上实现了SFC。通过实验证明,SFC适用于多种不同的数据模式。与MFC相比,SFC大幅减少了压实所用的时间,并使系统拥有更好的性能。