MySQL内核:InnoDB存储引擎.卷1
基本信息
编辑推荐
MySQL领域Oralce ACE专家力作
深入MySQL数据库内核源码分析
InnoDB存储引擎内核开发与优化必备宝典
内容简介
计算机书籍
《MySQL内核:InnoDB存储引擎.卷1》由资深MySQL专家,机工畅销图书作者亲自执笔,在以往出版的两本InnoDB介绍性图书的基础之上,更深入地介绍InnoDB存储引擎的内核,例如latch、B+树索引、事务、锁等,从源代码的角度深度解析了InnoDB的体系结构、实现原理、工作机制,并给出了大量最佳实践,希望通过《MySQL内核:InnoDB存储引擎 卷1》帮助用户真正了解一个数据库存储引擎的开发。
《MySQL内核:InnoDB存储引擎.卷1》可以成为带领读者进入数据库存储引擎的内核开发,帮助那些从事MySQL数据库的相关行业从业人员。同时,《MySQL内核:InnoDB存储引擎 卷1》也适合对于研究生阶段有志于数据库内核开发的同学阅读。
作译者
目录
第1章 概览
1.1 InnoDB 存储引擎历史
1.2 源码版本
1.3 源码风格
1.3.1 源码结构
1.3.2 代码风格
1.4 代码编译
1.5 阅读源码次序
1.6 思考题
1.7 继续阅读
第2章 基本数据结构与算法
2.1 相关文件
2.2 内存管理系统
2.2.1 内存管理
2.2.2 通用内存池
2.3 哈希表
2.3.1 哈希算法
2.3.2 数据结构
2.4 双链表
前言
过去这些年,我一直在和各种不同的数据库打交道,见证了 MySQL 从一个小型的关系型数据库发展成为各大互联网企业的核心数据库系统的过程。期间我参与了一些大大小小的项目开发工作,成功地帮助开发人员构建了一些可靠的、健壮的应用程序。在这个过程中积累了一些经验,正是这些不断累积的经验赋予了我灵感,于是有了本书。这本书实际上反映了这些年来我做了哪些事情,汇集了很多同行每天可能都会遇到的一些问题,并给出解决方案。
本书是 MySQL 内核系列的第一本书,与之前出版的 MySQL 技术内幕不同的是,该系列的书将更靠近数据库内核层面,揭示 MySQL 数据库内核是如何运行的。MySQL 内核系列的第一本书将从 InnoDB 存储引擎的内核来展开。
毫无疑问,InnoDB 存储引擎已经成为 MySQL 数据库的“标准配置”。Facebook、Twitter、Yahoo、百度、淘宝、腾讯、网易这些互联网公司都将 InnoDB 作为后台的存储引擎。在时间的长河以及线上高并发验证下,其已经被证明是高性能、高可扩展性的引擎。身处数据库这个圈子,可以明显地感觉到从 2010 年开始,各大互联网公司已经不再满足于仅仅使用 InnoDB 存储引擎,他们开始越来越接触到引擎的内核层面,对引擎进行内核级别的优化以及根据公司的业务需求进行二次开发。即使是 DBA 本身也开始慢慢地不满足现状开始研究起 InnoDB 存储引擎的内核,似乎一夜之间不了解点内核实现都不好意思和别人说
你是搞 MySQL 数据库的。当然,我们需要感谢 MySQL 数据库,感谢 MySQL 数据库的创始人和 InnoDB 存储引擎的创始人。正是他们开源了这些代码,使得我们这些后人可以站在巨人的肩膀上继续学习与进步。在这方面,MySQL/InnoDB 比其他数据库都要伟大,更值得我们尊敬。不可否认的是,国内对于数据库内核的开发学习资料与课程都非常有限。本科阶段几乎没有相关课程,仅特定数据库研究方向的研究生才会去关注这些技术,并且这些人才在国内非常稀少。很多想要踏进数据库内核领域的人在最初都会感到迷茫和无助。另外,有些人凭着自己的聪明与天赋看似掌握了内核的实现,但是从他们的博客描述来看,其离真正的理解还是有一些距离的,或者说他们仅刚入门。所以我们才会在网上看到不断有人在翻阅过代码后,或者简单设置了几个断点和调试后抱怨 InnoDB 存储引擎的设计是多么烂。数据库的世界并不如他们想象的那样简单与粗糙,数据库有着自己的理论体系。虽然数据库的实现有很多种,但大多需要遵循一些理论规范,如 Fix Rules、Write-Ahead Log、Force-log-at-commit、Lock 等。
我从 2006 年就开始进行数据库的内核开发,现在想来还最多只能称为 hack。我在内核开发的路上走了很多弯路,经过高人的指点以及自己不断的学习与探索,终于有了一些经验,现通过本书来完整地展示给读者。希望通过 MySQL 内核系列,使正在通往或已经在数据库内核开发道路的人员少走弯路。
出于这个目的,我联合了网易 MySQL 技术组的各位同事,完成了 InnoDB 存储引擎卷 1 的书籍撰写工作。其中第 1、3、4、5、7、8、9、10、11 章由我个人独立完成,第 2 和第 14章由我和温正湖共同完成、第 6 和第 12 章由我和饶陇辉共同完成、第 13 和第 15 章由我和蒋鸿翔共同完成。在每章的最后,我还给出了思考题以及继续阅读的参考资料,通过这部分的内容,读者可以
加深对于每个知识模块的理解,并继续对某一模块进行深入研究。
本书面向的读者群:
数据库管理员
数据库架构设计师
数据库内核开发人员
其他对数据库内核感兴趣的开发人员
如何阅读本书
本书一共有 15 章,每章都像一本“迷你书”,可以单独成册。用户可以有选择地阅读,但是更推荐根据本书的组织方式进行阅读,这样会更具有条理性。
第 1 章概览
本章首先介绍了 MySQL 数据库以及 InnoDB 存储引擎的历史,之后介绍了 InnoDB 存储引擎的源码结构与代码风格,最后推荐了阅读 InnoDB 存储引擎源码的次序。
第 2 章基本数据结构与算法
本章对 InnoDB 中常用的数据结构和算法进行了介绍。首先是 InnoDB 的内存管理系统,从内存管理机制、内存操作基元和内存池及内存区等概念着手进行了详细讲解;之后是哈希表结构,介绍了简单哈希表和带链哈希表两种;然后介绍了双链表结构;最后还介绍了动态数组、标准排序函数。本章的内容是 InnoDB 的基础,相信读者在阅读后续章节的代码时一定会遇到本章所提的相关数据结构与算法。
第 3 章同步机制
媒体评论
——李海翔《数据库查询优化器的艺术:原理解析与SQL性能优化》作者,Oracle公司MySQL全球开发团队成员
很兴奋,承尧又出新书了,作为他成为ORACLE ACE(MySQL)的一本新书,非常值得拥有。他的书我都通读过(他每次都送我,哈哈),非常通俗易懂,从中收获很大,尤其是《MySQL技术内幕:InnoDB存储引擎》系列。这次他的新书从数据库内核级更进一步介绍了MySQL数据库内核以及InnoDB引擎是如何运行的。InnoDB引擎现在已经深入人心,基本上成为MySQL的标配了。几年前开始,我就要求开发者默认使用InnoDB引擎,使用MyISAM引擎的话需要跟我讲清楚具体应用场景,否则一概驳回。如何能用好InnoDB引擎,结合业务需求真正做好数据库设计,这就需要深入理解InnoDB引擎是如何设计和工作的,相信读完这本书后,读者们都能从中得到肯定的答案。同时,让我们共同期待承尧的下一本大作早日面市。
——叶金荣MySQL Oracle ACE
我和姜承尧是多年的好友。他从2006年开始一直致力于数据库内核的开发研究,在内核开发方面有非常丰富的经验。目前国内涉及数据库内核方面的著作非常少,他的这些MySQL内核系列书的内容更靠近数据库内核层面,揭示MySQL数据库内核是如何运行的,是他自己在内核开发方面所走过路的总结。阅读这一系列书除了对数据库领域和涉及数据库领域的人员加强对数据库内核方面的理解有帮助,同时也会让正在通往或已经在数据库内核开发道路的人员少走一些弯路。
——杨海朝 新浪数据服务平台负责人/MySQL Oracle ACE Director
书摘
过去这些年,我一直在和各种不同的数据库打交道,见证了 MySQL 从一个小型的关系型数据库发展成为各大互联网企业的核心数据库系统的过程。期间我参与了一些大大小小的项目开发工作,成功地帮助开发人员构建了一些可靠的、健壮的应用程序。在这个过程中积累了一些经验,正是这些不断累积的经验赋予了我灵感,于是有了本书。这本书实际上反映了这些年来我做了哪些事情,汇集了很多同行每天可能都会遇到的一些问题,并给出解决方案。
本书是 MySQL 内核系列的第一本书,与之前出版的 MySQL 技术内幕不同的是,该系列的书将更靠近数据库内核层面,揭示 MySQL 数据库内核是如何运行的。MySQL 内核系列的第一本书将从 InnoDB 存储引擎的内核来展开。
毫无疑问,InnoDB 存储引擎已经成为 MySQL 数据库的“标准配置”。Facebook、Twitter、Yahoo、百度、淘宝、腾讯、网易这些互联网公司都将 InnoDB 作为后台的存储引擎。在时间的长河以及线上高并发验证下,其已经被证明是高性能、高可扩展性的引擎。身处数据库这个圈子,可以明显地感觉到从 2010 年开始,各大互联网公司已经不再满足于仅仅使用 InnoDB 存储引擎,他们开始越来越接触到引擎的内核层面,对引擎进行内核级别的优化以及根据公司的业务需求进行二次开发。即使是 DBA 本身也开始慢慢地不满足现状开始研究起 InnoDB 存储引擎的内核,似乎一夜之间不了解点内核实现都不好意思和别人说
你是搞 MySQL 数据库的。当然,我们需要感谢 MySQL 数据库,感谢 MySQL 数据库的创始人和 InnoDB 存储引擎的创始人。正是他们开源了这些代码,使得我们这些后人可以站在巨人的肩膀上继续学习与进步。在这方面,MySQL/InnoDB 比其他数据库都要伟大,更值得我们尊敬。不可否认的是,国内对于数据库内核的开发学习资料与课程都非常有限。本科阶段几乎没有相关课程,仅特定数据库研究方向的研究生才会去关注这些技术,并且这些人才在国内非常稀少。很多想要踏进数据库内核领域的人在最初都会感到迷茫和无助。另外,有些人凭着自己的聪明与天赋看似掌握了内核的实现,但是从他们的博客描述来看,其离真正的理解还是有一些距离的,或者说他们仅刚入门。所以我们才会在网上看到不断有人在翻阅过代码后,或者简单设置了几个断点和调试后抱怨 InnoDB 存储引擎的设计是多么烂。数据库的世界并不如他们想象的那样简单与粗糙,数据库有着自己的理论体系。虽然数据库的实现有很多种,但大多需要遵循一些理论规范,如 Fix Rules、Write-Ahead Log、Force-log-at-commit、Lock 等。
我从 2006 年就开始进行数据库的内核开发,现在想来还最多只能称为 hack。我在内核开发的路上走了很多弯路,经过高人的指点以及自己不断的学习与探索,终于有了一些经验,现通过本书来完整地展示给读者。希望通过 MySQL 内核系列,使正在通往或已经在数据库内核开发道路的人员少走弯路。
出于这个目的,我联合了网易 MySQL 技术组的各位同事,完成了 InnoDB 存储引擎卷 1 的书籍撰写工作。其中第 1、3、4、5、7、8、9、10、11 章由我个人独立完成,第 2 和第 14章由我和温正湖共同完成、第 6 和第 12 章由我和饶陇辉共同完成、第 13 和第 15 章由我和蒋鸿翔共同完成。在每章的最后,我还给出了思考题以及继续阅读的参考资料,通过这部分的内容,读者可以
加深对于每个知识模块的理解,并继续对某一模块进行深入研究。
本书面向的读者群:
数据库管理员
数据库架构设计师
数据库内核开发人员
其他对数据库内核感兴趣的开发人员
如何阅读本书
本书一共有 15 章,每章都像一本“迷你书”,可以单独成册。用户可以有选择地阅读,但是更推荐根据本书的组织方式进行阅读,这样会更具有条理性。
第 1 章概览
本章首先介绍了 MySQL 数据库以及 InnoDB 存储引擎的历史,之后介绍了 InnoDB 存储引擎的源码结构与代码风格,最后推荐了阅读 InnoDB 存储引擎源码的次序。
第 2 章基本数据结构与算法
本章对 InnoDB 中常用的数据结构和算法进行了介绍。首先是 InnoDB 的内存管理系统,从内存管理机制、内存操作基元和内存池及内存区等概念着手进行了详细讲解;之后是哈希表结构,介绍了简单哈希表和带链哈希表两种;然后介绍了双链表结构;最后还介绍了动态数组、标准排序函数。本章的内容是 InnoDB 的基础,相信读者在阅读后续章节的代码时一定会遇到本章所提的相关数据结构与算法。
第 3 章同步机制
【插图】
