本实验目前处于持续迭代中,已完成的更新和后续计划如下:
已更新(相较于 1.0 版本)
- 接口同步:将所有实验文档中的函数签名与
master分支最新代码对齐,包括:MemTable::flush_last新增flushed_tranc_ids输出参数Block::encode/Block::decode统一with_hash参数Block::get_tranc_id_at返回类型由uint16_t修正为uint64_tSST::open新增vlog参数(默认nullptr,向后兼容)SST::read_block参数类型改为int64_t(支持返回 -1)SST::begin新增keep_all_versions参数WAL构造函数参数max_finished_tranc_id重命名为checkpoint_tranc_id
- WAL 崩溃恢复机制更新:用
flushed_tranc_ids(std::set<uint64_t>)替代单一最大值,更精确地追踪哪些事务已完全持久化,避免“部分刷盘“导致的数据缺失。详见 Lab 5.5。 - 新增 Lab 7 WiscKey 键值分离:讲解 WiscKey 论文的核心思路、VLog 文件格式、SSTBuilder 和 SST 的 WiscKey 支持、Engine 集成方式。
后续更新计划
- 自由度提升:
1.0版本的Lab, 基本上就是在既有的项目代码下进行关键函数的挖空, 在组件设计层面没有给实验参与者太多的发挥空间, 后续应该添加更多的自由度, 允许实验者自由设计组件, 并且在组件设计中添加更多的测试用例。 - 测试用例覆盖率不足:
1.0版本的Lab中, 测试用例的覆盖率比较低, 比如对崩溃恢复的各种边界条件的考虑不足, 当然这确实也比较难控制就是了。 - 各个
Lab工作量不尽相同, 现在的Lab设计是按照功能模块进行划分的, 但这导致Lab 5和Lab 6的测代码量和难度远大于之前的Lab, 难度曲线可能不太合理, 后续应考虑对各个Lab进行更加均衡的划分。 - 进一步补充一些背景理论知识, 尤其是实际场景中的各种性能优化方案。
Lab 7 WiscKey 键值分离✅ 已完成(见 Lab 7)- Lab 7 VLog GC(垃圾回收)章节待补充。
如果你有兴趣参与本实验的建设,欢迎在下面的分支上提交PR: