具体描述
本书由浅入深地剖析了MariaDB,首先简要介绍了一些基础知识、新特性、对MySQL原有功能所做的扩展以及源代码,接着介绍了底层数据结构、线程池技术、binlog、复制等内容,最后介绍了分布式数据库系统。
作者简介
张金鹏
京东资深技术专家,MySQL数据库专家,京东云数据库组核心成员,主要负责MySQL内核优化及二次开发。多年数据库领域以及搜索引擎领域的工作经验,对Redis、Memcached等NoSQL数据库,以及CGroup、LXC、Docker等容器技术有深入的研究。
新浪微博:弓长金鹏
张成远
京东资深架构师。毕业于东北大学,硕士阶段研究分布式数据库相关方向,2012年加入京东云数据库技术团队。擅长高性能服务器开发、分布式数据库、分布式存储/缓存等大规模分布式系统架构。主导了京东分布式数据库系统及容器系统的架构与开发工作。
新浪微博:NEU_寒水
季锡强
京东资深架构师,主要负责京东分布式数据库的架构设计及研发工作,主导容器技术在京东的应用与推广。专注于高性能服务器、分布式数据库、分布式存储/缓存及容器技术,对容器核心技术及golang并发编程有深入研究。
目录信息
1.1 MariaDB的历史 1
1.2 MariaDB所做的事情 2
1.2.1 更丰富的存储引擎 2
1.2.2 性能的提升 2
1.2.3 扩展和新特性 3
1.2.4 更好的测试 3
1.2.5 尽量消除错误和警告 4
1.3 MariaDB的版本与兼容性 4
1.3.1 MariaDB 5.1和MySQL 5.1的不兼容性 4
1.3.2 MariaDB 5.2和MySQL 5.1的不兼容性 5
1.3.3 MariaDB 5.3和MySQL 5.1、MariaDB 5.2的不兼容性 5
1.3.4 MariaDB 5.5和MariaDB 5.3的不兼容性 6
1.3.5 MariaDB 5.5与MariaDB 5.3和MySQL 5.5 的不兼容性 7
1.3.6 MariaDB 10.0和MySQL 5.6的不兼容性 7
1.4 编译和安装MariaDB 8
1.4.1 使用二进制安装包进行安装 8
1.4.2 使用源代码进行编译安装 9
1.5 联系社区 11
1.6 小结 12
第2章 MariaDB的扩展和新特性 13
2.1 更多的存储引擎 13
2.1.1 全新的Aria存储引擎 13
2.1.2 XtraDB存储引擎 16
2.1.3 SphinxSE存储引擎 17
2.1.4 FederatedX存储引擎 17
2.1.5 TokuDB存储引擎 18
2.1.6 Cassandra存储引擎 18
2.1.7 CONNECT存储引擎 18
2.1.8 Sequence存储引擎 19
2.1.9 Spider存储引擎 20
2.2 线程池技术和binlog group commit技术 22
2.2.1 线程池技术 22
2.2.2 binlog group commit技术 23
2.3 MariaDB其他扩展和新特性 23
2.3.1 更高的时间精度 23
2.3.2 虚拟列 24
2.3.3 用户统计功能 25
2.3.4 KILL命令的扩展 27
2.3.5 命令执行进度报告 27
2.3.6 动态列 28
2.3.7 多源复制 29
2.4 小结 29
第3章 初识MariaDB源代码 31
3.1 MariaDB源代码的目录组织结构 31
3.2 MariaDB对类型和函数的封装 33
3.2.1 对类型的封装 33
3.2.2 对函数的封装 33
3.3 调试MariaDB 34
3.3.1 准备工作 34
3.3.2 mysqld关键的函数调用 37
3.3.3 调试 38
3.4 小结 40
第4章 MariaDB基础数据结构 41
4.1 内存池MEM_ROOT 41
4.1.1 内存碎片问题 42
4.1.2 MEM_ROOT的定义 44
4.1.3 MEM_ROOT的使用 46
4.1.4 MEM_ROOT的初始化 47
4.1.5 分配内存 48
4.1.6 内存回收 50
4.1.7 MEM_ROOT的使用场景 52
4.2 文件缓存IO_CACHE 52
4.2.1 高性能武器——缓存 53
4.2.2 IO_CACHE的定义 54
4.2.3 IO_CACHE的使用 57
4.3 NET结构 63
4.4 线程上下文——THD 65
4.5 TABLE_SHARE 69
4.6 TABLE 73
4.7 小结 76
第5章 MariaDB线程池 77
5.1 线程池相关的参数 77
5.1.1 MariaDB 5.1和MariaDB 5.3中的线程池 77
5.1.2 MariaDB 5.5和MariaDB 10.0中的线程池 78
5.2 何时使用线程池 79
5.3 线程池的实现 79
5.3.1 线程池相关的数据结构 80
5.3.2 线程池的初始化 82
5.3.3 添加连接到线程池 84
5.3.4 worker线程 85
5.3.5 get_event函数 86
5.3.6 listener线程 89
5.3.7 timer线程 92
5.4 小结 94
第6章 二进制日志binlog 95
6.1 简介 95
6.1.1 binlog的作用 96
6.1.2 index文件 96
6.2 binlog的使用 97
6.2.1 开启binlog 97
6.2.2 选择binlog的格式 97
6.2.3 binlog的相关参数 98
6.3 binlog事件 99
6.3.1 binlog事件格式 99
6.3.2 binlog事件类型 101
6.3.3 binlog事件的实现 108
6.4 清理binlog 109
6.4.1 手动清理binlog 109
6.4.2 自动清理binlog 109
6.4.3 purge命令的实现 109
6.5 binlog_cache_mngr结构 112
6.6 mysqlbinlog工具 112
6.7 使用binlog进行恢复 113
6.8 小结 113
第7章 binlog group commit技术 115
7.1 事务的两阶段提交 115
7.2 binlog group commit的工作原理 117
7.3 binlog group commit的实现 118
7.3.1 相关的数据结构 118
7.3.2 代码执行流程 120
7.3.3 事务排队 125
7.3.4 leader线程的工作 128
7.3.5 prepare_ordered和commit_ordered接口 134
7.4 小结 135
第8章 复制 136
8.1 简介 136
8.2 复制的作用 137
8.3 复制的工作原理 138
8.3.1 概要 138
8.3.2 relay-log 140
8.3.3 master.info文件和relay-log.info文件 140
8.4 复制的配置 141
8.4.1 在新安装的主库和从库上配置复制 141
8.4.2 主库有一定数据时的复制配置 144
8.4.3 选择性复制 150
8.5 复制的实现 151
8.5.1 复制相关的数据结构 152
8.5.2 复制的初始化——init_slave函数 157
8.5.3 CHANGE MASTER TO命令——准备工作 159
8.5.4 START SLAVE命令——开启复制 160
8.5.5 STOP SLAVE命令——停止复制 160
8.5.6 slave IO线程 161
8.5.7 slave SQL线程 164
8.5.8 master dump线程 165
8.6 半同步复制 168
8.6.1 半同步复制的工作原理 168
8.6.2 半同步的安装和配置 169
8.6.3 半同步复制的实现 171
8.6.4 半同步复制的变种 179
8.6.5 半同步复制的潜在问题 180
8.7 并行复制 181
8.7.1 MySQL的并行复制 181
8.7.2 MariaDB的并行复制 181
8.8 多源复制 182
8.8.1 多源复制的应用场景 182
8.8.2 多源复制相关的命令 183
8.8.3 MariaDB多源复制的实现 184
8.9 GTID 185
8.9.1 GTID的概念 186
8.9.2 在MySQL上配置基于GTID的复制 186
8.9.3 MySQL中GTID的实现 187
8.9.4 MariaDB中的GTID 195
8.10 小结 195
第9章 数据结构和算法 197
9.1 算法复杂度 197
9.2 B+树和索引 198
9.2.1 磁盘的读取 198
9.2.2 B+树 199
9.2.3 数据库索引 200
9.3 堆排序与快速排序 201
9.3.1 堆——优先级队列 201
9.3.2 堆排序 202
9.3.3 快速排序——qsort 203
9.4 ORDER BY的实现 204
9.4.1 使用索引的已有顺序 205
9.4.2 filesort算法 207
9.5 JOIN的实现 210
9.5.1 JOIN语句的使用 211
9.5.2 Nest Loop Join算法 212
9.5.3 Block Nest Loop Join算法 214
9.5.4 Batched Key Access Join算法 216
9.5.5 Hash Join算法 216
9.5.6 Sort Merge Join算法 217
9.6 小结 218
第10章 分布式数据库 219
10.1 分布式数据库概要 219
10.1.1 分布式数据库的特点 219
10.1.2 系统的扩展方式 220
10.1.3 分布式数据库中的技术难点 221
10.2 数据的分片方式 221
10.3 分布式数据库实践——京东分布式数据库系统 222
10.3.1 京东分布式数据库系统架构 222
10.3.2 高可用组的初始化 223
10.3.3 数据的分片 224
10.3.4 系统的高可用性 225
10.3.5 系统的可扩展性 227
10.4 小结 230
附录A 数据库与IO资源控制 231
· · · · · · (收起)
读后感
用户评价
作为一名在云原生和微服务架构下工作的开发者,我深知数据库作为后端服务的重要支撑,其稳定性和性能至关重要。《MariaDB原理与实现》这本书,正是满足了我对数据库底层技术刨根问底的强烈愿望。在实际工作中,我们常常会面临各种复杂的数据库场景,例如高并发读写、慢查询的定位与优化、数据一致性问题、以及大规模数据的存储和检索。仅仅依靠表面的SQL语句和配置参数,往往难以根本性地解决问题。我期待这本书能够详细阐述MariaDB的内存管理机制,包括缓冲池的运作方式、脏页的刷新策略,以及如何有效地利用内存来加速数据访问。对于I/O的优化,例如预读、顺序读写、随机读写性能的权衡,也希望能够有深入的讲解。查询优化器的内部逻辑,从SQL语句的解析到最终执行计划的生成,其中涉及到的各种优化技术,如索引选择、连接策略、函数优化等,都将是我重点关注的内容。此外,事务的ACID特性在MariaDB中的具体实现,特别是MVCC(多版本并发控制)是如何在高并发读写场景下保证一致性的,以及锁机制的设计和管理,都将是我希望深入了解的重点。我相信,通过对这本书的学习,我能够更准确地诊断数据库性能问题,制定更有效的调优方案,从而为我们的云原生应用提供更可靠的数据库支撑。
长久以来,我对数据库的理解,总是在“知其然,而不知其所以然”的尴尬境地徘徊。我能写出高效的SQL,能配置一些基本的参数,但每当遇到数据库性能的“顽疾”,或者需要进行深度的架构设计时,总会感到力不从心。《MariaDB原理与实现》这本书,以其坚实的标题,仿佛为我指明了一条通往数据库“内层空间”的道路。我迫切希望书中能够详细解析MariaDB的存储引擎架构,特别是InnoDB,从数据页的组织、行记录的存储格式,到各种索引(主键、二级索引)的内部实现原理,都能够得到清晰的阐述。查询优化器的工作流程,从SQL语句的解析、预处理,到各种可能的执行计划的生成与评估,其背后的决策逻辑和算法,都将是我非常感兴趣的部分。我希望能够理解,为什么某些SQL语句会生成特定的执行计划,以及如何通过调整SQL或数据库结构来引导优化器做出更优的选择。此外,事务的ACID特性,尤其是在并发环境下的隔离性是如何通过MVCC(多版本并发控制)来实现的,以及锁机制的精妙设计,都将是我希望从书中获得深度解答的关键。这本书的学习,对我来说,是一次“武功秘籍”的研习,期望能够从中领悟到数据库的“真传”,从而在面对复杂的技术挑战时,能够更加游刃有余。
长久以来,我对数据库的“黑箱”运作模式感到困惑,即使能够熟练地编写SQL语句并进行基本的性能调优,但对于那些隐藏在易用性之下的复杂机制,总觉得缺乏一种“掌控感”。《MariaDB原理与实现》这本书,正是以其清晰而专业的标题,点燃了我探索的激情。我最期待的,是这本书能够详细地解析MariaDB的存储引擎架构,特别是InnoDB,从最基础的数据页组织,到行记录的格式,再到索引(如B+树)是如何被构建和维护的,都能够得到系统、细致的讲解。我想知道,在高并发的读写场景下,InnoDB是如何通过MVCC(多版本并发控制)来保证数据的一致性和读取的隔离性的,以及其锁机制的设计,是如何在性能和并发之间取得平衡的。查询优化器的工作流程,从SQL语句的解析、词法语法分析,到逻辑优化和物理优化,再到最终生成最优执行计划的整个过程,其背后的算法和策略,都将是我学习的重中之重。此外,事务的ACID特性是如何在MariaDB中得到保证的,redo log和undo log在数据持久化和崩溃恢复中的具体作用,以及它们如何协同工作,都是我渴望从中获得深刻理解的关键点。这本书的阅读,对我来说,将是一次“洗髓伐骨”般的知识升级,希望能借此将数据库的理解从“术”提升到“道”的层面。
我对《MariaDB原理与实现》这本书的期待,源于我对数据库性能优化的执着追求。在我过往的项目中,数据库的瓶颈往往是制约整个系统性能的关键因素。虽然我能够熟练运用各种SQL技巧、索引策略以及一些基本的缓存机制来提升查询效率,但很多时候,我仍然感觉自己是在“猜测”和“试错”,而非基于深刻的原理进行精准调优。这本书的名字本身就传递出一种“知其然,更知其所以然”的承诺,这正是吸引我阅读的关键所在。我希望它能够详细解析MariaDB是如何管理内存,包括缓冲池的配置、淘汰策略,以及如何有效地利用这些内存资源来加速数据访问。同时,对于I/O的优化,如预读、延迟写等机制,也希望能有详尽的介绍。事务的隔离级别是如何在MariaDB中实现的?它如何权衡一致性、可用性和分区容错性?redo log和undo log在保证数据持久性和恢复性方面的具体作用机制,都将是我重点关注的内容。此外,书中对于复制(Replication)和集群(Clustering)的实现原理的阐述,如果能够触及到底层的数据同步方式、主从延迟的解决以及高可用性的保障,那将是我最大的惊喜。我渴望通过阅读此书,能够将理论知识与实际经验融会贯通,从而能够自信地诊断和解决各种复杂的数据库性能问题,成为一名真正意义上的数据库专家。
作为一名长期在分布式系统领域探索的技术人员,我一直对数据库的底层实现机制抱有浓厚的兴趣。《MariaDB原理与实现》这个书名,恰恰触及了我内心深处的好奇。我曾经在工作中遇到过各种与数据库相关的疑难杂症,从数据一致性问题到性能瓶颈,很多时候感觉自己只是在“头痛医头,脚痛医脚”,而未能触及问题的根本。这本书似乎承诺带我深入MariaDB的“心脏”,去了解它的“血管”和“神经系统”。我尤其期待它能详细阐述MariaDB的存储引擎架构,特别是InnoDB是如何管理数据页、行记录,以及是如何高效地组织索引,例如B+树的实现细节,包括页分裂、合并以及如何处理并发访问。查询优化器的工作原理,从SQL解析到执行计划的生成,以及各种优化技术的应用,如统计信息的收集与使用,都将是我深入学习的重点。在高并发场景下,MariaDB如何保证事务的ACID特性,特别是隔离性,MVCC(多版本并发控制)的具体实现方式,锁机制的设计和管理,以及如何避免死锁,这些都是我希望能够从书中获得清晰解答的关键问题。此外,对于数据库的持久化机制,如redo log和undo log的作用,以及它们如何协同工作来保证数据安全和崩溃恢复,我也充满了期待。我相信,这本书的学习过程,将是一次对数据库原理的深度挖掘,帮助我构建起更扎实的理论基础,从而在实际工作中能够更从容地应对挑战。
初识《MariaDB原理与实现》这本书,我便被它厚重的体量和扎实的标题所吸引。作为一名在数据库领域摸爬滚打多年的开发者,我深知理解底层原理对于提升技术深度和解决棘手问题的关键性。许多市面上的数据库书籍,往往停留在API调用、SQL语法讲解的层面,对于数据库是如何工作的,数据是如何存储、检索、优化的,则鲜有深入的探讨。我一直渴望找到一本能够真正揭示数据库“心脏跳动”的书籍,一本能够让我从“使用”数据库提升到“理解”数据库的书。《MariaDB原理与实现》正是这样一本引人入胜的书籍,它承诺将我带入MariaDB的内核世界,去探索那些隐藏在SQL查询背后的复杂机制。我迫不及待地想知道,它将如何阐述存储引擎的架构,如何解析查询优化的算法,如何描述事务的ACID特性是如何被实现的,以及在高并发场景下,MariaDB又是如何保证数据的一致性和可用性的。这本书不仅仅是知识的传授,更像是一次深入的探险,一次对数据库技术极致的追求。我期待它能够为我打开一扇新的大门,让我对数据库的理解上升到一个全新的高度,从而能够更有效地设计、部署和维护高性能的数据库系统,甚至在遇到性能瓶颈时,能够从根源上找到解决方案,而不是仅仅依靠一些通用的调优建议。这本书的出现,对于所有渴望深入理解数据库、追求技术卓越的开发者来说,无疑是一份宝贵的财富。
在我多年的软件开发生涯中,数据库始终是核心的组成部分,但对其底层原理的理解,却一直是我的一块心病。市面上关于数据库的书籍很多,但真正能够深入剖析其“心脏”的却寥寥无几。《MariaDB原理与实现》这本书,正是以其直击灵魂的标题,吸引了我。我渴望了解,当一个SQL查询被发送到MariaDB时,它内部究竟经历了怎样的“旅程”?我希望书中能够详细阐述MariaDB的整体架构,包括各个模块的功能以及它们之间的协作方式,特别是内存管理和I/O操作是如何被优化的。存储引擎,尤其是InnoDB,是数据存储和处理的关键,我期待书中能够深入解析其数据页的结构、行记录的存储格式、以及索引(包括B+树的内部实现、页分裂和合并)是如何工作的。查询优化器的工作机制,从SQL语句的解析、预处理,到各种查询策略的生成与评估,再到最终执行计划的选择,其背后的算法和数据结构,都将是我重点学习的内容。此外,事务的ACID特性,特别是隔离性是如何在高并发环境下通过MVCC(多版本并发控制)来实现的,以及锁机制的设计与管理,都将是我希望获得清晰且深入阐述的关键点。我相信,这本书将为我打开一扇通往数据库“内核”世界的大门,让我能够更深刻地理解数据库的运作,从而在实际工作中能够更有效地进行性能调优和问题排查。
怀揣着对数据库系统底层运作原理的好奇,我翻开了《MariaDB原理与实现》。这本书的封面设计简洁而专业,传递出一种严谨的气息,仿佛预示着其内容之深邃。作为一名长期与数据打交道的技术人员,我对MySQL及其分支MariaDB的熟悉程度不亚于自己的掌上明珠。然而,对于那些隐藏在易用性之下的复杂逻辑,我却常常感到一丝隔阂,总觉得对数据库的理解还停留在“表面”的调优和“局部”的优化。这本书的出现,恰好填补了我的这一认知空白。我非常期待它能够详细阐述MariaDB的存储引擎模型,特别是InnoDB,这个承载了绝大多数数据存储和事务处理的引擎,它的内部结构、页管理、索引实现、锁机制等等,都将是我想深入了解的重点。此外,查询优化器的工作流程,从SQL语句的解析、预处理,到各种查询计划的生成与选择,其背后的决策逻辑和算法,都让我充满求知欲。这本书是否能够带领我领略到SQL语句在转化为高效执行计划的“艺术”?它是否会深入剖析MVCC(多版本并发控制)的实现细节,解释其如何在高并发环境下平衡读写性能与数据一致性?这些都是我迫切希望从书中找到答案的问题。我坚信,只有真正理解了数据库的“筋骨”,才能更好地驾驭它,才能在面对复杂业务场景和性能挑战时,游刃有余,提出最有效的解决方案。
对于任何一个致力于深入理解数据库技术的人来说,《MariaDB原理与实现》这本书的书名本身就自带一种不可抗拒的吸引力。我常常感到,虽然我能够熟练地使用SQL语言,能够进行一些常规的性能调优,但对于数据库内部到底是如何工作的,仍然笼罩着一层神秘的面纱。这本书的出现,恰恰是我寻找的那把“钥匙”,它承诺带我走进MariaDB的“发动机舱”,去了解那些驱动着它高效运转的精密部件。我特别期待书中能够详细解析MariaDB的整体架构,包括其各个组件之间的交互关系,以及内存和磁盘I/O的优化策略。对于存储引擎,尤其是InnoDB,我希望能够深入了解其数据页的组织方式,索引的内部实现(如B+树的变种、二级索引的处理),以及行级别锁和表级别锁的机制,如何在高并发环境下维护数据一致性。查询优化器的工作流程,从SQL的解析、语法检查,到逻辑优化和物理优化,再到最终执行计划的生成,其背后的算法和策略,都将是我学习的重点。此外,事务的ACID特性是如何在MariaDB中得到保障的,MVCC(多版本并发控制)的实现原理,以及redo log和undo log在保证数据持久性和崩溃恢复中的作用,我都希望能够获得清晰且深入的阐述。这本书的学习,对我而言,是一次对自己数据库知识体系进行“深度重塑”的机会,期望能够从中获得更扎实的理论基础和更前沿的实践指导。
在数据库技术日新月异的今天,我始终认为,对底层原理的深刻理解是区分普通使用者和资深技术专家的关键。《MariaDB原理与实现》这本书,正是以其直指核心的标题,吸引了我。在我日常的开发和运维工作中,常常会遇到一些难以解释的数据库行为,或者性能瓶颈,而这些问题往往根源于对数据库内部机制的不甚了解。我期待这本书能够系统地、深入地解析MariaDB的架构设计,从内存管理、磁盘I/O,到查询的整个生命周期,都能够得到详尽的阐述。特别是对于存储引擎层面的剖析,如InnoDB的页结构、行格式、索引组织方式,以及其在并发控制方面所采用的MVCC机制,都将是我希望深入学习的内容。我希望能够清晰地理解,当一个SQL语句被提交时,它在MariaDB内部是如何被解析、优化、执行的,以及在这个过程中,各种优化技术是如何发挥作用的。此外,事务的ACID特性在MariaDB中是如何被实现的,特别是在高并发和故障场景下,如何保证数据的一致性和持久性,redo log和undo log的角色和工作机制,都是我渴望从中获得清晰解答的重点。这本书的阅读,对我来说,不仅仅是知识的积累,更是对数据库技术“内功”的一次系统性修炼,期望能够借此提升自己的问题诊断和性能调优能力,达到一个更高的技术境界。
花了2个多小时,将书阅读完毕。源代码堆砌的比较多,而且对于优化的新特性,一笔带过。购买的时候太过高估本书能带给我的知识了,对于看过5.6/MariaDB 官方文档的人 不推荐购买此书。
很好的一本书,比姜的第二本书好了很多倍。
可以了
总感觉最后的附录是凑页数的。其他还行。
不是一本SQL命令集,非常好。涉及了MySQL的一些内部实现,还是值得好好读一读的。