[RocksDB剖析系列]|[RocksDB剖析系列] Remote Compaction

【[RocksDB剖析系列]|[RocksDB剖析系列] Remote Compaction】参考:

  • https://github.com/facebook/r...
  • https://zhuanlan.zhihu.com/p/...
Remote Compaction机制使远程地Compaction成为可能,它可以是一个不同的进程,甚至是在远程的主机上。通过将Compaction服务迁移到远程的主机上,不会有后台的Compaction服务去影响read和write请求,提高了性能和稳定性。而专用于Compaction的远程主机可以只对Compaction做优化,并用来给不同的DB做Compaction。
[RocksDB剖析系列]|[RocksDB剖析系列] Remote 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过去,然后再做重命名。
[RocksDB剖析系列]|[RocksDB剖析系列] Remote Compaction
文章图片

    推荐阅读