TiFlash Minor Compaction 为什么不排序后再合并?

在 MemTableSet 的数据 Flush 到磁盘中,需要对 Block 的数据进行排序。但是在后面的 Minor Compaction 又将几个小的的 ColumnFileTiny 合并到一个大的 ColumnFileTiny,这个过程没有涉及到排序(仅首尾相连),想问一下为什么需要这么做?并且后面的 Minor Compaction 导致 Flush 过来的数据是无序的,那 Flush 过来的数据又为什么需要排序呢?

实际上 Minor Compaction 是可以排序的,不过排序完要像 Flush 一样对 DeltaIndex 整理,然后需要处理一下 corner case,开发者偷懒了……

也就是如果从 Delta Index 那读数据,是读第一层(即小的 ColumnFileTiny 的数据)?那新合成的 ColumnFileTiny(大的)有什么作用呢?

合并之后的大 ColumnFileTiny 要替换原来小的呀。合并大文件主要是为了减少 IO 次数。当然如果合并的过程中排序,对数据的局部性也有帮助,但是似乎帮助不是非常大。我很久以前 hack 过一个有 bug 的版本,发现没有明显受益,bug 一时半会儿也难查,就放弃了 Orz。

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。