参考:

  • https://github.com/facebook/r...
  • https://zhuanlan.zhihu.com/p/...

Remote Compaction机制使近程地Compaction成为可能,它能够是一个不同的过程,甚至是在近程的主机上。通过将Compaction服务迁徙到近程的主机上,不会有后盾的Compaction服务去影响read和write申请,进步了性能和稳定性。而专用于Compaction的近程主机能够只对Compaction做优化,并用来给不同的DB做Compaction。

Schedule

第一步是数据库触发Compaction,它不会在本地进行Compaction,而是在CompactionService中发送 Compaction信息。用户须要实现CompactionService::Start(),来发送Compaction信息给远端过程,从而调度Compaction

Compact

remote的Compaction Worker须要运行应用发来的Compaction信息运行DB::OpenAndCompact()。Worker会在只读模式下进行Compact,它不能批改LSM Tree,而是将Compact的后果放在一个临时的地位。

Return Result

当Compaction完结后,须要向原先的那台db返回后果,蕴含Compact的SST的元数据和一些internal的信息,与调度环节中相似的,此处两台机器的通信须要被实现。

Install & Purge

原db通过CompactionService::WaitForComplete()期待后果返回,后果应该传入该函数并返回。在这之后,如果临时工作区和db不在同一个文件系统上,须要先把临时工作区的文件copy过来,而后再做重命名。