![]()
内容推荐 本书由某互联网大厂资深工程师撰写,带你研读存储引擎的底层支撑技术、主流派系及其设计与实现精髓。作者特意采用经典计算机图书的循序渐进方式讲解,不断抛出一个个引导你思考的问题,让你渐入佳境,从纷繁复杂的产品和业务中抽取出本质,从容应对多种存储与系统难题。 全书共9章,分为三部分。第一部分(第1~3章)讲解存储引擎的全貌,涉及存储引擎中高频使用的数据结构、存储介质等,为深入学习后面的内容做铺垫。第二部分(第4~6章)介绍基于B+树的存储引擎,重点介绍为什么选择B+树作为存储引擎索引结构、B+树存储引擎解决哪些问题以及如何解决,并以BoltDB存储引擎项目为例来讲解核心原理与实现细节。第三部分(第7~9章)介绍基于LSM派系的存储引擎,重点介绍LSM Tree中各组件的功能及作用,最后剖析了LevelDB项目的核心原理与实现细节。 作者简介 文小飞,大厂资深研发工程师、公司级讲师。曾就职于腾讯等互联网公司,从事基础架构设计、推荐系统架构设计、后端开发等工作,具有丰富的基础架构实践经验。对技术充满热情,尤其对存储引擎、分布式共识算法等技术有较为深入的理解,曾编写“自底向上分析BoltDB源码”系列文章,并发布“数据存储与检索”等网络课程。业余时间喜欢阅读开源项目源码,学习新技术。 目录 前言 第1章 存储引擎概述 1.1 数据存储体系 1.1.1 OLTP、OLAP与HTAP 1.1.2 关系数据库、NoSQL数据库与NewSQL数据库 1.1.3 内存型存储组件与磁盘型存储组件 1.1.4 读多写少组件、写多读少组件和读多写多组件 1.1.5 数据存储与检索 1.2 数据存储的核心:存储引擎 1.2.1 存储引擎整体架构 1.2.2 存储引擎的共性问题 1.3 存储引擎的分类 1.3.1 读多写少:基于B+树的存储引擎 1.3.2 写多读少:基于LSM派系的存储引擎 1.4 小结 第2章 索引数据结构 2.1 基础数据结构 2.1.1 数组 2.1.2 链表 2.2 Hash类数据结构 2.2.1 Hash表 2.2.2 位图 2.2.3 布隆过滤器 2.3 二叉树类数据结构 2.3.1 二叉搜索树 2.3.2 红黑树 2.3.3 跳表 2.4 多叉树类数据结构 2.4.1 B树 2.4.2 B+树 2.4.3 其他多叉树 2.5 小结 第3章 数据存储介质 3.1 内存 3.1.1 内存的基本内容 3.1.2 内存管理机制 3.1.3 虚拟内存管理机制 3.2 持久化内存 3.3 磁盘 3.3.1 磁盘的基本内容 3.3.2 磁盘管理机制 3.3.3 加速磁盘访问的方案 3.4 小结 第4章 从宏观角度理解B+树存储引擎的原理 4.1 B+树存储引擎产生的起点 4.1.1 诞生的背景 4.1.2 设计的目标 4.2 B+树存储引擎方案选型 4.2.1 数据结构方案对比 4.2.2 目光转向磁盘 4.2.3 索引维护和存储 4.2.4 选择B树还是B+树 4.3 B+树存储引擎方案选型结果 4.3.1 方案选型结果 4.3.2 反向论证 4.4 小结 第5章 从微观角度理解B+树存储引擎的工程细节 5.1 边界条件处理 5.1.1 B+树在磁盘和内存中的映射 5.1.2 读操作的处理 5.1.3 写操作的处理 5.2 异常情况处理 5.2.1 异常情况总体分析 5.2.2 数据部分写入的异常处理 5.3 事务 5.3.1 事务的基本概念 5.3.2 并发控制 5.4 范围查询与全量遍历 5.5 小结 第6章 BoltDB核心源码分析 6.1 BoltDB整体结构 6.1.1 BoltDB项目结构 6.1.2 BoltDB整体实现架构 6.2 page解析 6.2.1 page基本结构 6.2.2 元数据页 6.2.3 空闲列表页 6.2.4 分支节点页 6.2.5 叶子节点页 6.3 node解析 6.3.1 B+树结构概述 6.3.2 node结构分析 6.3.3 node的增删改查 6.3.4 node分裂 6.3.5 node合并 6.4 Bucket解析 6.4.1 Bucket结构分析 6.4.2 Bucket遍历的Cursor核心结构分析 6.4.3 Bucket的增删改查 6.4.4 KV数据的增删改查 6.4.5 Bucket的分裂和合并 6.5 Tx解析 6.5.1 Tx结构分析 6.5.2 Commit()方法分析 6.5.3 Rollback()方法分析 6.6 DB解析 6.6.1 DB结构分析 6.6.2 Open()方法分析 6.6.3 Begin()方法分析 6.6.4 Update()和View()方法分析 6.6.5 Batch()方法分析 6.7 小结 第7章 深入理解LSM Tree原理 7.1 LSM Tree的发展背景 7.2 从零推导LSM Tree 7.2.1 存储介质的选择 7.2.2 写请求的处理 7.2.3 读请求的处理 7.3 LSM Tree的架构演进 7.3.1 数据更新分类 7.3.2 双组件LSM Tree结构 7.3.3 多组件LSM Tree结构 7.3.4 实际的LSM Tree结构 7.4 LSM Tree的核心问题 7.4.1 数据压缩/合并 7.4.2 数据分区 7.4.3 读放大、写放大和空间放大 7.4.4 写放大优化 7.5 小结 第8章 LSM派系存储引擎 8.1 LSM Tree存储引擎 8.1.1 LSM Tree工程应用 8.1.2 LSM Tree的KV分离存储技术WiscKey 8.2 LSM Hash存储引擎 8.2.1 LSM Hash的起源 8.2.2 Bitcask的核心原理 8.3 LSM Array存储引擎 8.3.1 LSM Array的设计思想 8.3.2 Moss的核心原理 8.4 其他LSM存储引擎 8.4.1 LSM存储引擎扩展 8.4.2 消息队列Kafka存储引擎 8.5 小结 第9章 LevelDB核心源码分析 9.1 LevelDB概述 9.1.1 LevelDB整体架构 9.1.2 LevelDB项目结构 9.2 DB核心接口分析 9.2.1 DB结构 9.2.2 Open(options,dbname,dbptr)的实现 9.2.3 Put(k,v)和Delete(k)的实现 9.2.4 Get(k)的实现 9.3 MemTable的实现分析 9.3.1 MemTable结构 9.3.2 Add(k,v)和Get(k)的实现 9.3.3 SkipList结构 9.4 WAL日志的实现分析 9.4.1 WAL日志的格式 9.4.2 Writer的实现 9.4.3 Reader的实现 9.5 SSTable的实现分析 9.5.1 SSTable的数据格式 9.5.2 Block的写入和读取 9.5.3 SSTable的写入和读取 9. |