京东一线开发人员力作
详细讲述数据库内部的实现原理
深入浅出地阐述MariaDB的设计理念
广泛涵盖MariaDB区别于MySQL的主要亮点功能
第1章 MariaDB概述 1
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
自从60多年前关系型数据库出现起,它就被广泛使用。至今,几乎所有IT系统都离不开关系型数据库。在MySQL出现前,关系型数据库行业几乎被Oracle、IBM DB2和Microsoft SQL Server几个商业巨头垄断了。商业数据库的封闭性和高昂的价格,对IT行业在深度和广度上的使用、提升数据库系统以及时适应各种新需求(尤其是互联网等行业带来的新需求)造成了很大的阻碍。20世纪末开源数据库MySQL的出现和崛起,为整个数据库行业带来了巨大的希望。可惜随着MySQL被Oracle公司收购,存在Oracle公司将MySQL闭源的巨大潜在风险。为了避免这种风险,为行业提供一个永久开源免费的关系型数据库系统,MariaDB被创造了出来。虽然MariaDB最初只是MySQL的一个分支,但近年来随着社区的壮大和普及度的迅猛上升,它在很多方面已经超过了MySQL,例如性能、复制功能和存储引擎等,并且大有完全替代MySQL的势头。
本书深入浅出地阐述了MariaDB的设计理念,剖析了MariaDB的几个关键而有趣的子系统。本书的作者是我的同事,我目睹了他们将日常工作实践中总结和提炼出MariaDB的心得转化成书的过程。这是一本理论结合实践的书,读者不但可以学习到MariaDB的理论,还可以参照书中的实例一步步地自行调试实践。我相信本书会对有志学习MariaDB的读者有所帮助。
作为一个曾经在数据库行业耕耘8年的老兵(主要从事SQL Server存储引擎研发),我也深深地期待国人不但能深度掌握MariaDB的使用技术,还能在MariaDB社区作出越来越多的贡献,为积累和提升数据库方面的核心能力而努力。期待这本书能启发和引导更多的同行来参与MariaDB社区的工作并发挥出价值。
何刚,京东集团技术副总裁
读到这本书,首先让我眼前一亮的是其内容的高度实践性。从书名《MariaDB原理与实现》可以看出,它并非那种泛泛而谈的理论书籍,而是更加侧重于将抽象的原理与实际的数据库操作紧密结合。我期待书中会包含大量的代码示例、配置文件的解读,甚至是实际故障排除的案例分析,让我在学习过程中能够立刻上手,验证理论的可靠性。想象一下,书中可能详细讲解了如何优化慢查询,如何进行性能调优,如何搭建高可用集群,这些都是日常工作中非常棘手的问题。而且,作者很可能还会深入剖析MariaDB的各个组件,比如查询优化器、存储引擎(特别是InnoDB)、日志系统等,并解释它们是如何协同工作的,这对于理解数据库的深层运作机制至关重要。我希望这本书能够成为我手中的一把利器,在遇到数据库相关的难题时,能够迅速找到解决方案,并且更重要的是,通过学习,能够从根源上理解问题,从而预防类似问题的发生,提升整个系统的稳定性和效率。
评分这本书给我的第一印象是它在知识广度上的深度挖掘。虽然题目明确指向MariaDB,但我预感作者在梳理其原理时,必然会涉及到数据库系统的一些基础理论和演进历程。比如,书中或许会从关系型数据库的发展历史谈起,介绍SQL语言的诞生和演变,再引申到ACID特性、事务的本质、索引的多种实现方式(B-tree, hash等)等通用概念,然后再具体到MariaDB是如何实现和优化的。这种由浅入深、由通用到具体的讲解方式,对于我这样的读者来说,能够构建起一个完整的知识体系,不仅仅是学习MariaDB,更是对整个数据库领域有了更清晰的认识。我非常期待书中能够包含对不同存储引擎(如Aria, MyRocks)的深入对比分析,以及它们各自的优缺点和适用场景,这对于我根据实际需求选择最合适的存储方案非常有帮助。相信通过这本书的学习,我能够更加游刃有余地驾驭MariaDB,甚至可以将学到的知识迁移到其他数据库系统中。
评分这本书的书名《MariaDB原理与实现》给我带来了一种探索未知领域的兴奋感。我设想,它不仅仅是一本技术手册,更是一次深入MariaDB“内心世界”的旅程。作者很可能不仅仅是介绍如何使用MariaDB,而是会深入到其源代码层面,或者至少是基于对源代码的理解,来阐述其工作原理。比如,书中或许会详细解释MariaDB是如何解析SQL语句的,不同的SQL语句是如何被转换为内部执行计划的,以及查询优化器是如何进行工作的。我非常期待书中能够有对 MariaDB 架构的详细图解,例如其连接器/线程池、SQL解析器、查询优化器、执行引擎、存储引擎等模块是如何划分和交互的。对于复制(replication)部分,我也希望能够看到其主从同步的原理,包括binlog的生成、传输和应用过程,以及半同步复制、多源复制等高级特性的实现。这本书的深度和广度,将是我对MariaDB有全面、深刻认识的关键。
评分从这本书的装帧设计和字体选择来看,就透露着一种“工匠精神”,这让我对内容充满了期待。我猜想,在《MariaDB原理与实现》这本书中,作者必然会投入巨大的精力去剖析MariaDB的核心技术细节,比如它如何处理并发连接、如何管理内存和磁盘 I/O、以及其复制机制的底层原理。我特别希望能看到关于 MariaDB innoDB 存储引擎的深度解析,包括其页结构、聚簇索引、二级索引、MVCC(多版本并发控制)的实现细节,以及回滚段(rollback segment)和 redo log / undo log 的工作流程。此外,对于 MariaDB 在安全性方面的设计,例如权限管理、用户认证、数据加密等,我也希望能有详尽的讲解。如果书中还能包含一些关于 MariaDB 性能调优的实际案例,比如如何通过调整参数、优化SQL语句、设计合理的表结构来提升查询速度和并发能力,那将是锦上添花。这本书无疑会成为我理解和掌握MariaDB的宝贵资源。
评分这本书的封面设计非常吸引人,金属质感的MariaDB Logo搭配深邃的蓝色背景,给人一种专业、严谨又不失现代感的感觉。翻开第一页,我就被其厚实的纸张和精美的排版所折服,字体清晰,间距适宜,阅读体验极佳。内容方面,我尤其欣赏作者对概念的梳理能力,虽然这本书的题目是《MariaDB原理与实现》,但我预期它会像一本精心打磨的工艺品,将那些看似枯燥的技术细节,通过生动形象的比喻和深入浅出的讲解,呈现在读者面前。我期望书中不仅能看到数据库的底层架构,如存储引擎的演进、事务隔离级别的实现细节,甚至是对SQL解析和执行计划生成过程的剖析,更能体会到作者在其中倾注的心血,如何将复杂的系统工程化,并最终转化为稳定、高效的服务。这本书在我看来,更像是一位经验丰富的工程师,将多年积累的智慧与实践心得,毫无保留地分享出来,带领读者一步步探索MariaDB的精髓,解锁其背后的运行机制,让我对学习和掌握MariaDB的信心倍增,仿佛已经站在了通往精通的大道上。
评分很不错 同事需要
评分这本书感觉不是太适合新手,适合对数据库或者mysql有一点了解的选手,对源码做了专业的分析介绍,适合想要了解原理的同学
评分好
评分还没看,不过应该还不错~
评分正在研读中
评分还没看,主要想了解一下
评分还没开始看,看了几页,蛮专业的
评分很好。行家写的书。已经看完了。
评分好快送货,经常买。好快送货,经常买。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.coffeedeals.club All Rights Reserved. 静流书站 版权所有