新書推薦:
《
盗墓笔记之秦岭神树4
》
售價:HK$
57.3
《
战胜人格障碍
》
售價:HK$
66.7
《
逃不开的科技创新战争
》
售價:HK$
103.3
《
漫画三国一百年
》
售價:HK$
55.2
《
希腊文明3000年(古希腊的科学精神,成就了现代科学之源)
》
售價:HK$
82.8
《
粤行丛录(岭南史料笔记丛刊)
》
售價:HK$
80.2
《
岁月待人归:徐悲鸿自述人生艺术
》
售價:HK$
61.4
《
女人的中国医疗史:汉唐之间的健康照顾与性别
》
售價:HK$
103.8
|
編輯推薦: |
作者专业:阿里巴巴和贝壳找房专家撰写内容实用:深入LevelDB架构与源码,精通键-值数据库更上层楼:掌握谷歌Bigtable数据库单机版设计精髓学以致用:基于LevelDB,开发分布式数据库
|
內容簡介: |
本书详细剖析LevelDB从使用到设计实现的方方面面,读后可了解谷歌Bigtable数据库的设计精髓,逻辑上可分为两部分。
部分着重讲解LevelDB的基础知识,主要内容如下。
1)基本数据结构,这是理解后续内容的基础,也可以加深对比较器、迭代器等常见数据结构的理解。
2)基本使用,如数据库打开、关闭以及基本的读写操作。
3)总体架构与设计思想,读后可掌握LevelDB的整体情况与设计思路。
4)公用基础类,读后可了解LevelDB中如何实现数值编码、内存管理以及文件读取等。
第二部分着重讲解LevelDB各模块的实现细节,主要内容如下。
1)Log模块的实现细节,以及如何通过Log进行崩溃恢复,并生成一个MemTable文件。
2)MemTable模块的实现细节,以及MemTable超过内存阈值时如何生成一个SSTable文件。
3)SSTable模块的实现细节。
4)Compaction原理与多版本管理。
|
關於作者: |
廖环宇,中南大学硕士、阿里云高级算法专家与工业大脑算法团队负责人,长期致力于人工智能算法与工业大数据技术的研究和实践,主导过许多大型数据智能平台的开发与应用。
张仕华,贝壳找房资深软件开发工程师,毕业于北京科技大学,曾就职于360、滴滴。热衷源码研究与探究技术本质,合著有《Redis 5设计与源码分析》。
|
目錄:
|
前言
第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
|
內容試閱:
|
为什么要写这本书
笔者在滴滴工作期间,公司某团队实现了一个兼容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。
特别致谢
后,我要特别感谢我的父母、妻子与女儿,为写作这本书,我牺牲了很多陪伴他们的时间。同时因为他们的鼓励与支持,我才能坚持写下去。
感谢高婧雅编辑,得益于她的专业与耐心审稿,才进一步提升了本书的质量。
谨以此书献给热爱计算机行业的朋友们!
张仕华
|
|