乐趣区

关于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。

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 过来,而后再做重命名。

退出移动版