LevelDB 源码分析「九、Compaction」 | SF-Zhou's Blog #169
Replies: 5 comments 1 reply
-
|
首先执行的是 AddBoundaryInputs。其英文注释中解释地非常详细:当 Compaction 的范围为 [l1, u1][l1,u1] 时,该范围的数据将会被移动到 Level+1。如果当前 Level 存在文件 [l2, u2][l2,u2],并且 user_key(u1) = user_key(l2),那么下一次查询 user_key(u1) 时会在 Level 层提前返回旧的数据 博主,我有点不明白 我是这么想的,除了level0层其它层都不存在重叠的sstable也就不存在user_key(u1)==user_key(l2) 而在level 0层PickCompaction不是已经获得level0层所有的重叠文件了吗 现在为什么还要做这一步 |
Beta Was this translation helpful? Give feedback.
-
可以参考原 issue,在使用 snapshot 时可能会同时存在多个相同的 user_key 的。 |
Beta Was this translation helpful? Give feedback.
-
楼主我看了这个函数GetOverlappingInputs这个函数对于非0层调用了三次 其中两次关系着level层的输入集合 第二次根据level及level+1层在不扩大level+1层输入文件个数情况下找level层的重叠sstable为什么边沿文件会找不到呢 尽管user_key相等这个注释所说的文件[l2,u2]也应该被加入集合中..我去掉了第二次GetOverlappingInputs之前的AddBoundAry函数依旧报错。。我不明白这个情况发生条件 |
Beta Was this translation helpful? Give feedback.
-
你好,你的问题我实在无法看懂,标点符号也很迷。如果你对 GetOverlappingInputs 的修复有疑问的话,原 issue 中提供了一个最小复现样例,你可以在原来的 LevelDB 源码中复现该问题。 |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
https://sf-zhou.github.io/leveldb/leveldb_09_compaction.html
Beta Was this translation helpful? Give feedback.
All reactions