【问题标题】:Do Rocks DB or Level DB write log even when compaction?Rocksdb 或 Leveldb 是否在压缩时写入日志?
【发布时间】:2020-03-10 08:37:37
【问题描述】:

我只知道 Rocks DB 获得写入操作时,它会先写入日志以保持一致性。而且我知道如果 Memtable 被刷新,它会删除该日志。 我很好奇,当通过压缩刷新一个新的 SSTable 时,Rocks DB 是否也会为那个新的 SSTable 写入日志?如果不是,Rocks DB 如何通过压缩保证新 SSTable 的一致性?

【问题讨论】:

    标签: database key-value-store leveldb rocksdb


    【解决方案1】:

    是的,但它将元数据写入清单文件,否则写入日志文件。您可以在函数 logandapply() 中找到相关语句。

    【讨论】:

    • 谢谢,非常有帮助。看到代码的结果是,没有记录压缩的键值记录。 Level DB 上只记录以前版本信息等描述符。
    • @HoyoungLee 是的,manifest 文件只保存元数据,kv 记录在写入 sstables 之前保存在 log 中。您可以在 db_impl.cc 中为该例程读取函数 recover()。
    • 我在 DBImpl::DoCompactionWork() 上找不到为输出文件(由压缩创建的新 sstable)写入日志的机制,它实际上是在进行压缩。我认为 Level DB 只是通过参考清单来回滚恢复以进行压缩。不是吗?
    • 是的,数据日志只用于内存表。 Leveldb 仅使用清单文件记录新 sstables 的元数据。数据日志和清单文件协同工作以保持一致性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2016-03-20
    • 2011-03-14
    • 1970-01-01
    • 2011-12-19
    相关资源
    最近更新 更多