简介:
comapction过程就是文件的合并过程,但是需要注意,合并哪些文件?就涉及到文件的选择,
具体选完文件之后,就涉及真正的合并操作,也就是读N个小文件,合并为一个新文件;
下面就是“选文件”,“读文件”,“写文件”的代码简要链路;
选文件:
LevelCompactionPicker或UniversalCompactionBuilder
读文件
CompactionJob::processKeyValueCompaction
CompactionIterator::Next
MergingIterator::Next
正常读文件流程
compaction写文件:
BlockBasedTableBuilder::Add
BlockBasedTablebuilder::Flush
BlockBasedTableBuilder::WriteBlock
BlockBasedTableBuilder::WriteRawBlock | CompressBlock 压缩的逻辑。。。snappy
WritableFileWriter::Append
WritableFileWriter::Flush
WritableFileWriter::WriteBuffered
system_call_fastpath
sys_write
vfs_write
do_sync_write
xfs_file_aio_writexxxx