了解数据库的内部原理其实很不容易,大部分的读写都停留在理论文章上,因此肖哥带着大家使用Java手写一个完整的数据库,让大家了解数据库的解析器、性能分析器、认证、查询优化器,执行引擎、存储引擎、事务管理、MVCC,数据恢复等一系列功能。这个工作量比较大,属于每日1-2更新,大家如果想了解数据库的内容原理,掌握数据库的核心技术,那么可以跟着肖哥的步骤一步一步的学习。数据库会包含大家熟悉的数据结构与算法例如 B+树索引 ,R树索引 等,仅数据存储就包含了数据块(Chunks)、文件头(File Header)、键值存储(MVMap)、并发控制、事务、序列化与反序列化、压缩、加密、索引、持久化存储、内存映射存储、分片机制、以及计划中的压缩和碎片整理等能力。
关注本号Solomon肖哥弹架构获取更多精彩内容 ,需要完整代码的可以留言
手写数据库持续更新系列 ,喜欢的读者 , 一定要订阅哦
欢迎 点赞,收藏,关注 。
完整的数据库具备能力图:
手写计划
- 小白能够看得懂的最简化版本数据库
- 标准SQL解析器
- 存储引擎
- 执行引擎
- 事务管理
- 日志系统
- 元数据管理
- 安全管理
- 性能分析器
- 网络版
- 标准JDBC接口对接
整体手写系列的大模块会包含以上功能。
MVCC版本的实现
本案例通过版本编号与历史版本数据进行管理 ,详细看代码
大体实现思路
1. 数据模型
首先,一个能够存储数据不同版本的数据模型。
2. 事务管理
需要一个事务管理器来处理事务的开始、提交和回滚。
3. MVCC读取
实现MVCC读取,确保事务可以看到一致的快照数据。
4. 垃圾收集
实现简单的垃圾收集策略,回收旧版本的数据。
5. 示例使用
总结
本MVCC实现,包括数据版本控制、事务管理、一致性读取、提交和回滚事务,以及基本的垃圾收集。然而,这仍然是没有实现模型的所有功能。实际数据库系统中的MVCC实现会涉及更复杂的机制,如行级锁、无锁数据结构、版本链管理、写入时复制(Copy-On-Write)策略、冲突检测和解决算法,后续会继续提供。