02 2025 档案
摘要:恭喜你!你成功了!在上一章中,您使您的LSM引擎具有多版本的能力,并且用户可以使用事务API与您的存储引擎进行交互。在本周末,我们将实现存储引擎的一些简单但重要的特性。欢迎来到Mini-LSM的第3周零食时间! 在本章中,我们将提取我们的合并垃圾回收逻辑,成为合并过滤器。 目前,我们的合并将简单地保
阅读全文
摘要:项目地址:https://github.com/skyzh/mini-lsm 个人实现地址:https://gitee.com/cnyuyang/mini-lsm 现在,我们将在事务提交时添加一个冲突检测算法,以便使引擎具有一定程度的可序列化性。 要运行测试用例,请执行以下操作: cargo x c
阅读全文
摘要:项目地址:https://github.com/skyzh/mini-lsm 个人实现地址:https://gitee.com/cnyuyang/mini-lsm 在本章中,您将实现Transaction的所有接口。您的实现将为事务内的修改维护一个私有工作区,并批量提交它们,以便事务内的所有修改在提
阅读全文
摘要:项目地址:https://github.com/skyzh/mini-lsm 个人实现地址:https://gitee.com/cnyuyang/mini-lsm 在本章中,您将实现必要的结构来跟踪用户正在使用的最小读取时间戳,并在执行合并时从SST中清理不会再使用的版本。 要运行测试用例,请执行以
阅读全文
摘要:项目地址:https://github.com/skyzh/mini-lsm 个人实现地址:https://gitee.com/cnyuyang/mini-lsm 在本章中,您将: 在上一章的基础上完成读路径,以支持快照读。 实现事务API,支持快照读。 引擎恢复过程中能正确恢复已提交时间戳。 最后
阅读全文
摘要:项目地址:https://github.com/skyzh/mini-lsm 个人实现地址:https://gitee.com/cnyuyang/mini-lsm 在本章中,您将: 重构你的memtable/WAL以存储一个键(key)的多个版本。 实现新的引擎写入路径,为每个键(key)分配一个时
阅读全文
摘要:项目地址:https://github.com/skyzh/mini-lsm 个人实现地址:https://gitee.com/cnyuyang/mini-lsm 在本章中,您将: 重构你的实现以使用key+ts(时间戳)表示。 使您的代码使用新的键(key)表示形式进行编译。 要运行测试用例,请执
阅读全文
摘要:Week 3 Overview Multi-Version Concurrency Control 在这一部分中,您将在前两周构建的LSM引擎上实现MVCC。我们将在key中添加时间戳编码以维护key的多个版本,并更改引擎的某些部分以确保根据是否有用户读取旧版本来保留旧数据或进行垃圾收集。 本教程中
阅读全文
摘要:慢查询分析思路 确认是锁还是执行消耗 对于执行消耗,分析执行过程 索引基础知识回顾 InnoDB 聚簇索引结构 CREATE TABLE `t1` ( `id` int NOT NULL AUTO_INCREMENT, `a` int DEFAULT NULL, `b` int DEFAULT NU
阅读全文
摘要:项目地址:https://github.com/skyzh/mini-lsm 个人实现地址:https://gitee.com/cnyuyang/mini-lsm 在上一章中,您已经构建了一个完整的基于LSM的存储引擎。在本周末,我们将实现存储引擎的一些简单但重要的优化。欢迎来到Mini-LSM的第
阅读全文
摘要:项目地址:https://github.com/skyzh/mini-lsm 个人实现地址:https://gitee.com/cnyuyang/mini-lsm Summary 在本章中,您将: 实现WAL日志文件的编解码 系统重启时使用WAL日志恢复memtable 要将测试用例复制到启动器代码
阅读全文