基本信息
- 作者: [美]亚历克斯·彼得罗夫(Alex Petrov)
- 丛书名: O’Reilly精品图书系列
- 出版社:机械工业出版社
- ISBN:9787111655169
- 上架时间:2020-5-16
- 出版日期:2020 年5月
- 开本:16开
- 页码:318
- 版次:1-1
- 所属分类:计算机 > 数据库 > 数据库存储与管理

【插图】

内容简介
作译者
目录
第一部分 存储引擎
第1章 简介与概述 13
1.1 数据库架构 14
1.2 内存数据库与磁盘数据库 16
1.3 面向列与面向行的数据库 17
1.3.1 面向行的数据布局 18
1.3.2 面向列的数据布局 19
1.3.3 区别与优化 20
1.3.4 宽列式存储 20
1.4 数据文件和索引文件 21
1.4.1 数据文件 22
1.4.2 索引文件 23
1.4.3 间接的主索引 24
1.5 缓冲、不可变性和有序性 25
1.6 本章小结 26
第2章 B树基础知识 28
2.1 二分搜索树 28
2.1.1 树的平衡 29
2.1.2 基于磁盘存储的树 31
前言
回到2000年,那时如果你要选择一个数据库,则只有少数几个选项,而且其中大部分都属于关系型数据库,因此它们之间的差异相对较小。当然,这并不是说所有数据库都是完全相同的,只是它们的功能和使用场景都非常相似。
其中一些数据库专注于水平扩展(scale out),即通过运行多个数据库实例(表现得像是一个单一逻辑单元)来提高性能并增加容量,例如:Gamma数据库机器项目、Teradata、Greenplum、Parallel DB2等。如今,水平扩展仍然是客户期望的最重要的数据库特性之一,云服务的日益普及诠释了这一点。相较于将数据库迁移至更大型、功能更强大的计算机进行垂直扩展(scale up),启动一个新实例并将其添加到集群中通常要容易得多。因为迁移可能会耗时冗长且令人痛苦不堪,还可能会导致停机。
在2010年左右,一类新型的最终一致性数据库开始逐步涌现,并且一些诸如NoSQL、大数据等术语也日益流行。在过去的15年间,开源社区、大型互联网公司和数据库供应商构建了众多的数据库和工具,以至于当人们在试图理解它们的使用场景、细节和规范时很容易迷失方向。
Amazon团队于2007年发布的Dynamo论文[DECANDIA07]对数据库社区产生了相当巨大的影响,在短时间内它便激发出了许多变体和实现。其中最突出的是诞生于Facebook的Apache Cassandra、LinkedIn研发的Voldemort,以及由前Akamai工程师研发的Riak。
如今,该领域再次发生了变化:在键值存储、NoSQL和最终一致性数据库之后,我们开始看到一些可扩展性更强、性能更高的数据库,它们能够在保证具有更强一致性的同时执行复杂的查询。
本书的受众
在技术会议的交流中,我经常听到同样的问题:“如何更多地了解有关数据库内部的原理?我甚至不知道从哪里开始。”关于数据库系统的大多数书籍都没有详细介绍存储引擎的实现,并且只是在较高的层次上介绍了访问方法,例如B树。很少有书籍涵盖较新的概念,例如不同的B树变体和日志结构存储(log-structured storage),因此我通常建议直接阅读论文。
但是每个读过论文的人都知道这并不容易:时常缺乏上下文,措辞可能含糊不清,论文之间甚至几乎根本没有联系,论文本身也不容易找到。本书简要总结了重要的数据库系统概念,并可以为希望深入研究的人们提供指南,也可以为已经熟悉这些概念的人们提供备忘单。
并非每个人都希望成为数据库开发者,但是本书也将为使用数据库系统构建软件的人员提供帮助,如:软件开发者、运维工程师、架构师和工程技术经理。
如果你的公司依赖于任何基础架构组件,无论是数据库、消息队列、容器平台还是任务调度器,你都必须通过阅读项目变更日志(change-log)和邮件列表来与社区保持联系、同步项目的最新进展。理解术语并了解其中的工作原理将使你能够从这些信息来源中获取更多信息,并可以更高效地使用工具来进行故障诊断,识别和避免潜在的风险与瓶颈。如果系统出现了某些问题,那么对数据库系统的工作原理有一个全面和基本的了解将会对你有所帮助。利用这些知识,在面对问题时,你将有能力提出假设、进行验证、找到根本原因,并将其讲解给其他项目成员。
本书也适合那些具备好奇心的人:喜欢学习一些不急用的知识的人,将空闲时间花在捣鼓一些有趣事情上的人。他们有的自己编写编译器,有的编写自用的操作系统、文本编辑器、电脑游戏,有的学习编程语言—他们乐于获取新知识。
本书假设读者具有一些开发后端系统和以用户身份使用数据库系统的经验。同时,具备一些不同种类数据结构的知识将有助于更快地吸收书中的知识。
为什么应该阅读本书
我们经常听到人们用他们实现的概念和算法来描述数据库系统:“该数据库使用Gossip来进行成员资格的传播”(参见第12章)、“他们已经实现了Dynamo”或“这就像他们在Spanner论文中描述的一样”(参见第13章)。抑或,如果你正在讨论算法和数据结构,那么你会听到类似于“ZAB和Raft有很多共同点”(参见第14章)、“Bw树就像是在日志结构化存储上实现的B树一样”(参见第6章)或“它们使用的是类似于Blink树中的同级指针”(参见第5章)的描述。
我们需要使用抽象来讨论复杂的概念,但是我们不能在每次开启一场对话时都讨论抽象术语。以白话的形式来掌握这些抽象概念是一个捷径,这能帮助我们将注意力转移到其他更高层次的问题上。
学习基本概念、证明和算法的一个优点是它们永不过时。当然,总会有新的东西出现,但是新算法往往是在发现经典算法的缺陷或改进空间之后才被创造出来的。了解历史有助于更好地理解这些算法之间的差异和它们的发明动机。
学习这些内容是鼓舞人心的。你将看到各种各样的算法,了解我们的工业界是如何一个接一个地解决问题的,并开始欣赏数据系统。同时,学习这些是有回报的:你几乎可以感觉到多个拼图碎片在脑海中移动到一起,最终形成一幅完整的图画,并且你将总是能够与他人分享这幅图画。
本书的范畴
本书既不是关于关系型数据库的书,也不是关于NoSQL的书,而是关于在各种数据库系统中使用的算法和概念的书,且重点是存储引擎和负责数据分布的组件。
媒体评论
——Michael Klishin
RabbitMQ资深贡献者
“ 这本书对于和任何数据库系统技术打交道的人来说都是必读之书,尤其是那些需要决定使用什么系统的人。”
——Nate McCall
Apache Cassandra 提交者
PMC主席
当我们选择、使用并维护一个数据库系统时,理解它的原理至关重要。但是现今有太多的分布式数据库和工具可供使用,要想弄明白每一种工具的作用以及它们之间的区别往往并不容易。在这本实用指南中,作者讲解了现代数据库和存储引擎背后的概念。
通过本书,你将领略到从众多书籍、论文、博客和多个开源数据库源代码中精心选取的相关材料,并且了解到众多现代数据库之间最重要的区别在于决定存储结构和数据分布的子系统。
你将深入了解如下内容:
? 存储引擎:学习存储的种类、分类依据,理解基于B树和不可变日志存储结构的存储引擎。
? 存储构建块:理解数据库文件如何使用诸如页缓存、缓冲池等辅助数据结构来组织构建高效的存储。
? 分布式系统:逐步学习节点和进程间如何连接并构建复杂的通信模式。
? 数据库集群:深入探究现在数据库中常用的一致性模型,并了解分布式存储系统是如何实现一致性的。
Alex Petrov是一位数据基础架构工程师,数据库和存储系统的狂热爱好者,Apache Cassandra 提交者和PMC成员,精通存储、分布式系统和算法。