compaction的过程是怎样的?

最近在读kudu的书,上面讲解的kudu的compaction过程,第一反应就想到了nebula的compaction过程,但是没有知道详细的介绍,随来提问。
kudu对于compaction的描述如下

文件布局和compaction。在存储系统中进行随机更新的最大挑战之一便是当数据过期后删除这些不需要的数据,并保证操作者访问的是最新版本的数据——这些操作都要尽可能地快。Kudu使用多个机制来实现这一点。
关于Kudu存储数据的方式,让我们来考虑两个主要场景。一个是插入新数据,另一个是更新现有数据。
总的来说,每一个写入操作都将遵循以下步骤:
1.写操作被提交到一个tablet的Write Ahead Log(WAL)。
2.把插入操作添加到MemRowSet中。
3.当MemRowSet 满了之后,就被刷新(flushed)到磁盘,成为DiskRowSet。
每次Kudu收到新数据时,就将这份数据存储到内存中我们称为Mem-RowSet的地方。你可以把MemRowSet看作一个临时的写缓冲区。当MemRowSet满了之后,就被刷新到磁盘。假设Kudu接收到对名为users的表的插入操作,将主键为“jmspaggi”的行的password列的值设置为“secret”,将last列设置为空,并将其存储到内存中。在刷新时,Kudu会创建DiskRowSet,并且在DiskRowSet中将那一行的所有列分成不同的区间,每一列为一个区间。你可以将DiskRowSet视为较大文件中的一个区间,用于存储特定集合的数据。

Compaction 在 Nebula 中的运用: https://docs.nebula-graph.com.cn/site/pdf/NebulaGraph-book.pdf page 315

rocksdb 的 compaction 介绍: Compaction · facebook/rocksdb Wiki · GitHub

3 个赞

好的,谢谢,这本书得好好看看,看能不能找到bug :smiley:

2 个赞

哈哈哈 如有 bug 欢迎报 issue :blush:

该话题在最后一个回复创建后30天后自动关闭。不再允许新的回复。