[RocksDB剖析系列] Remote Compaction

参考:

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

[RocksDB剖析系列] Remote Compaction_第1张图片

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剖析系列] Remote Compaction_第2张图片

你可能感兴趣的:([RocksDB剖析系列] Remote Compaction)