1. compaction介绍
对于LevelDb来说,写入记录操作很简单,删除记录仅仅写入一个删除标记就算完事,但是读取记录比较复杂,需要在内存以及各个层级文件中依照新鲜程度依次查找,代价很高。为了加快读取速度,levelDb采取了compaction的方式来对已有的记录进行整理压缩,通过compaction操作可以达到以下几个效果:
- 其一是将内存的数据持久化到磁盘,压缩服务器使用的内存;
- 其二是在服务器灾难恢复过程中,减少必须从提交日志里读取的数据量,如果没有进行落盘,那么都需要从日志中进行恢复;
- 其三是清理冗余数据,因为LevelDB的更新和删除操作具有延后性,两种操作实际上都会向LevelDB写入一条新记录,所以通过重新compaction整理数据,可以清理冗余数据,节省磁盘空间;
- 其四是通过compaction使level 0以下的文件层中的数据保持有序,这样便可以通过二分进行数据查找,同时也可以减少待查找的文件数量,提升读效率;
levelDb的compaction机制和过程与Bigtable所讲述的是基本一致的,Bigtable中讲到三种类型的compaction: minor 、major、full。
- minor Compaction:就是把memtable中的数据导出到SSTa