首页>参考读物>计算机科学与技术>数据库

精通LevelDB
作者 : 廖环宇,张仕华 著
丛书名 : 数据库技术丛书
出版日期 : 2021-11-02
ISBN : 978-7-111-69326-0
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 209
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

全书分为3个部分:
第1部分介绍LevelDB的背景知识,主要描述LevelDB是什么,具有什么样的特性,有什么样的应用场景。此外,分析LevelDB的源代码目录结构,介绍其总体架构与设计思想,并对个各个子模块的功能进行简要的描述。
第二部分,按前面划分好的软件模块,对每一个模块进行详细的介绍。在模块详细介绍时,着重讲清每个模块的原理及其在LevelDB中的具体作用,并有针对性的加入一些C++编程规范相关的内容。
通过阅读本书,读者不仅能学习高性能Kev/Value数据库的实现原理,还能掌握LevelDB中几个经典的数据结构与模块,如SSTable、LSM等,对未来的应用与开发设计提供重要的参考。

图书特色

阿里、贝壳找房专家联合撰写,深入方法与关键代码层面,多注释与讲解 
本书系统剖析LevelDB的数据结构、使用、架构、公用基础类与主要模块实现,是掌握Bigtable数据库设计精髓的不二之选

图书前言

为什么要写这本书
笔者在滴滴工作期间,公司某团队实现了一个兼容Redis协议的分布式NoSQL数据库Fusion。Fusion是构建在SSD磁盘上的存储服务,底层使用存储引擎RocksDB来保存数据。因为兼容Redis协议,所以在数据量特别大的一些场景下,我们开始使用Fusion替代之前使用的Redis。
RocksDB,是一个基于LevelDB开发、实现持久性键-值存储的C++库。而LevelDB则是由Google的Jeff Dean与Sanjay Ghemawat于2011年开发完成并且开源的键-值嵌入式C++库。
虽然同属键-值存储,但Redis是一个基于内存的数据存储引擎,而LevelDB会将数据写入硬盘。出于好奇,笔者业余时间开始阅读LevelDB的源码并零零散散写了一些文章。由于之前写作《Redis 5设计与源码分析》一书时结识了高婧雅编辑,而高编辑跟进的一本LevelDB源码分析的书籍正好需要一名合著者。于是,本书就这样诞生了。
本书特色
虽然国内各大互联网厂商有各类基于LevelDB(或者RocksDB)的分布式键-值存储,但还没有一本系统分析LevelDB实现原理的中文书籍。本书首先介绍LevelDB的基本使用,然后介绍LevelDB的三大基本操作——读取、写入及删除,接着详细介绍LevelDB中的公用基础类,包括文件操作、数值编码、内存管理等。掌握这些基础之后,开始分模块介绍LevelDB的实现,包括Log模块、MemTable模块以及SSTable模块,最后介绍LevelDB中层级的原理以及如何管理各个层级。
通过阅读本书,读者会对很多问题有更加深入的了解,例如:
如何实现快照读取;
Redo Log(重做日志)如何设计;
LevelDB为何会分多个层级;
LSM树到底是什么,为何该数据结构适用于写多读少的场景。
许多底层知识其实是相通的,我们常用的关系型数据库MySQL也有重做日志,也有快照读取。
LevelDB中的SSTable在各种存储引擎中得到了广泛的应用,包括HBase、Cassandra等。LevelDB中的布隆过滤器、归并排序以及LRU Cache等结构更是大量应用于各种场景。
学习LevelDB,不仅能了解如何设计高性能键-值存储,还能加深对数据库实现的整体认知,同时对各种数据结构的实现和使用场景有更加直观的了解。
读者对象
数据库从业人员
应用开发人员
计算机相关专业学生
对数据库技术感兴趣的人员
如何阅读本书
本书从逻辑上分为两大部分。
第一部分着重讲解LevelDB的基础知识。
第1章介绍LevelDB的诞生、特性及其衍生产品。
第2章介绍LevelDB的基本数据结构,了解这些基本数据结构有助于对后续知识的理解。阅读本章,也可以加深对比较器、迭代器等常见数据结构的理解。
第3章介绍LevelDB的基本使用,包括数据库打开、关闭以及基本的读写操作。
第4章介绍LevelDB的总体架构与设计思想,通过本章可以了解LevelDB的模块组成。
第5章介绍LevelDB的公用基础类,帮助读者了解在LevelDB中如何实现数值编码、内存管理以及文件读取等。
第二部分着重讲解LevelDB各模块的实现细节。
第6章介绍LevelDB中Log模块的实现细节,以及如何从Log文件恢复并生成一个MemTable。
第7章介绍LevelDB中MemTable模块的实现细节,以及MemTable超过内存阈值时如何生成一个SSTable。
第8章介绍LevelDB中SSTable模块的实现细节。
第9章介绍LevelDB中的Compaction原理与多版本管理。
附录简要介绍RocksDB对LevelDB的优化。
通过阅读本书,不只可以熟悉LevelDB的底层原理,还可以加深对整个数据库实现的了解。
勘误和支持
由于笔者水平有限,编写时间仓促,书中难免会出现错误或者不准确的地方,恳请读者批评指正。如果你有更多的宝贵意见,可以通过https://github.com/erpeng联系笔者,期待能够得到你们的真挚反馈,在技术之路上互勉共进。
致谢
感谢本书的合作者——环宇,因为你,才有了这本书的诞生。
感谢伟大的开源运动促进了计算机行业的蓬勃发展。
感谢Jeff Dean与Sanjay Ghemawat创造了LevelDB。
特别致谢
最后,我要特别感谢我的父母、妻子与女儿,为写作这本书,我牺牲了很多陪伴他们的时间。同时因为他们的鼓励与支持,我才能坚持写下去。
感谢高婧雅编辑,得益于她的专业与耐心审稿,才进一步提升了本书的质量。
谨以此书献给热爱计算机行业的朋友们!

张仕华

上架指导

计算机\数据库

封底文字

LevelDB是Google的两位专家实现的非常高效的键-值数据库,堪称单机版Bigtable。它有许多键-值数据库所不具备的优秀特性,能够处理亿级数据量,具有非常好的读写性能。国内各大互联网厂商均有各类基于LevelDB(或RocksDB)实现的分布式键-值存储数据库。
学习LevelDB,不仅能了解如何设计一个高性能键-值存储库,还能够加深对数据库实现的整体认知,同时对各种数据结构的实现和使用场景有更加直观的了解。
通过阅读本书,读者会对很多问题有更加深入的理解,例如:
LevelDB的总体架构与设计逻辑;
如何实现快照读取;
重做日志(Redo Log)如何设计;
LevelDB中布隆过滤器与LRU Cache的应用;
Log模块、SSTable模块、MemTable模块的实现机制与源码;
Compaction原理与多版本管理;
LSM树到底是什么,为何该数据结构适用于写多读少的场景。

图书目录

前言
第1章 初识LevelDB1
1.1 键-值数据库的提出与价值1
1.2 LevelDB的诞生过程2
1.3 LevelDB的特性3
1.4 LevelDB的性能分析4
1.5 LevelDB的衍生产品5
1.5.1 RocksDB6
1.5.2 SSDB7
1.6 小结8
第2章 基本数据结构9
2.1 string与Slice9
2.2 错误处理Status10
2.3 key比较函数接口Comparator11
2.4 迭代器接口13
2.5 系统参数14
2.5.1 DB参数Options14
2.5.2 读操作参数ReadOptions16
2.5.3 写操作参数WriteOptions16
2.6 小结17
第3章 LevelDB使用入门18
3.1 源码简介18
3.1.1 目录结构18
3.1.2 安装与编译19
3.1.3 引用头文件20
3.2 创建(打开)与关闭数据库21
3.3 数据的读、写与删除23
3.4 数据批量操作24
3.5 迭代器与key的查询操作26
3.5.1 前向与反向迭代循环遍历26
3.5.2 按key的范围进行查询27
3.6 性能优化方案28
3.6.1 启用压缩28
3.6.2 启用Cache29
3.6.3 启用FilterPolicy30
3.6.4 key的命名设计30
3.7 小结31
第4章 总体架构与设计思想32
4.1 键-值存储系统的基本要求32
4.2 Bigtable与LevelDB 33
4.3 主要模块功能介绍34
4.4 主要操作流程分析36
4.4.1 数据库Open流程分析36
4.4.2 数据Get流程分析39
4.4.3 数据Put与Write流程分析42
4.4.4 快照生成与读取分析46
4.5 小结48
第5章 公用基础类49
5.1 LevelDB跨平台编程49
5.1.1 LevelDB操作系统可移植方案49
5.1.2 LevelDB移植到操作系统接口规范50
5.1.3 POSIX可移植操作系统接口55
5.1.4 原子指针与内存屏障61
5.2 文件操作66
5.2.1 顺序文件操作66
5.2.2 随机文件操作73
5.2.3 Log文件操作77
5.3 Env操作环境抽象接口81
5.3.1 PosixEnv对象84
5.3.2 EnvWrapper与InMemoryEnv93
5.4 int数值编码99
5.4.1 什么是编码99
5.4.2 int定长数值编码100
5.4.3 int变长数值编码102
5.5 内存管理104
5.5.1 Arena内存池的基本思想105
5.5.2 Arena内存池的定义与原理105
5.5.3 Arena内存的分配108
5.5.4 内存使用率统计114
5.5.5 非内存池的内存分配优化115
5.6 小结116
第6章 Log模块117
6.1 Log文件格式定义117
6.2 Log文件读写操作119
6.2.1 Log文件写入119
6.2.2 Log文件读取122
6.3 记录Log文件124
6.4 从Log文件恢复MemTable125
6.5 小结126
第7章 MemTable模块127
7.1 MemTable插入与查找127
7.1.1 MemTable插入128
7.1.2 MemTable查找129
7.2 SkipList插入与查找131
7.2.1 SkipList插入132
7.2.2 SkipList查找134
7.3 MemTable生成SSTable136
7.4 小结137
第8章 SSTable模块139
8.1 SSTable文件格式139
8.1.1 SSTable的组成140
8.1.2 块格式141
8.1.3 数据索引区域145
8.1.4 数据区域145
8.1.5 元数据索引区域145
8.1.6 元数据区域146
8.2 SSTable的读写流程148
8.2.1 生成块148
8.2.2 读取块151
8.2.3 生成SSTable152
8.2.4 读取SSTable156
8.3 布隆过滤器的实现158
8.3.1 布隆过滤器的设计160
8.3.2 布隆过滤器的使用162
8.4 LRU Cache的实现166
8.4.1 LRU Cache的设计167
8.4.2 LRU Cache的使用173
8.5 小结174
第9章 多版本管理与Compaction原理176
9.1 多版本管理机制177
9.1.1 VersionEdit机制177
9.1.2 Version机制182
9.1.3 VersionSet机制187
9.1.4 Manifest机制189
9.2 Compaction原理189
9.2.1 触发时机190
9.2.2 文件选取191
9.2.3 执行流程195
9.2.4 文件清理197
9.3 小结199
附录 LevelDB的演进200

教学资源推荐
作者: Nello Cristianini John Shawe-Taylor
作者: 徐洁磐 操凤萍 编著
参考读物推荐
作者: (美)Kevin Loney Marlene Theriault 等
作者: (美)Jason S.Couchman,Sudheer N.Marisetti