译者序
前言
致谢
审校者简介
第一部分 方法和工具
第1章性能调优方法 2
1.1 警示故事 2
1.2 对症性能调优 3
1.3 系统性能调优 3
1.3.1 数据库请求剖析 3
1.3.2 MongoDB数据库的层次 4
1.4 小化应用程序工作负载 5
1.5 减少物理IO 6
1.6 优化磁盘IO 6
1.7 集群调优 7
1.8 小结 7
第2章MongoDB架构与概念 8
2.1 MongoDB文档模型 8
2.1.1 JSON 9
2.1.2 二进制JSON 9
2.1.3 集合 9
2.1.4 MongoDB schema 9
2.2 MongoDB协议 12
2.2.1 有线协议 12
2.2.2 MongoDB驱动程序 12
2.3 MongoDB命令 13
2.3.1 查找命令 13
2.3.2 聚合命令 14
2.3.3 数据操作命令 15
2.4 一致性机制 15
2.4.1 读取策略与写入策略 15
2.4.2 事务 16
2.5 查询优化 16
2.6 MongoDB架构 17
2.6.1 mongod 17
2.6.2 存储引擎 17
2.6.3 副本集 18
2.6.4 分片 19
2.6.5 分片机制 19
2.6.6 集群平衡 20
2.7 小结 20
第3章行业工具 21
3.1 explain() 21
3.1.1 开始使用explain() 22
3.1.2 替代计划 24
3.1.3 执行统计信息 25
3.1.4 使用explain()来调优查询 26
3.1.5 可视化解释函数的使用方法 28
3.2 查询剖析器 29
3.2.1 system.prof?ile集合 30
3.2.2 分析剖析数据 31
3.3 使用MongoDB日志进行调优 33
3.4 服务器统计信息 35
3.5 检查当前操作 38
3.6 操作系统监控 41
3.7 MongoDB Compass 42
3.8 小结 43
第二部分 应用程序与数据库设计
第4章schema建模 46
4.1 指导原则 46
4.2 链接与嵌入 47
4.2.1 案例研究 47
4.2.2 获取客户的所有数据 50
4.2.3 获取所有未结订单 51
4.2.4 热门产品 52
4.2.5 插入新订单 53
4.2.6 更新产品 54
4.2.7 删除客户 54
4.2.8 案例研究总结 55
4.3 高级模式 56
4.3.1 子集化 56
4.3.2 垂直分区 58
4.3.3 属性模式 58
4.4 小结 60
第5章索引 61
5.1 B树索引 61
5.1.1 索引选择性 62
5.1.2 唯一索引 63
5.1.3 索引扫描 63
5.1.4 不区分大小写的搜索 64
5.2 复合索引 65
5.2.1 复合索引性能 66
5.2.2 复合索引键顺序 66
5.2.3 复合索引指南 67
5.2.4 覆盖索引 67
5.3 索引合并 68
5.4 局部索引和稀疏索引 68
5.4.1 局部索引 69
5.4.2 稀疏索引 69
5.5 使用索引进行排序和连接 70
5.5.1 排序 70
5.5.2 连接 70
5.6 索引开销 70
5.7 文本索引 73
5.8 地理空间索引 78
5.8.1 地理空间索引性能 81
5.8.2 地理空间索引限制 81
5.9 小结 82
第三部分 MongoDB代码调优
第6章查询调优 84
6.1 缓存结果 84
6.2 优化网络往返 86
6.2.1 投影 86
6.2.2 批处理 87
6.2.3 在代码中避免过多的
网络往返 88
6.2.4 批量插入 90
6.2.5 应用程序架构 90
6.3 选择索引与选择扫描 90
6.4 优化排序操作 93
6.5 选择或创建正确的索引 95
6.6 过滤策略 97
6.6.1 不等条件 97
6.6.2 范围查询 99
6.6.3 $OR或$IN操作 100
6.6.4 数组查询 101
6.6.5 正则表达式 102
6.6.6 $exists查询 103
6.7 优化集合扫描 105
6.8 小结 105
第7章调优和利用聚合管道 106
7.1 调优聚合管道 106
7.1.1 优化聚合排序 109
7.1.2 自动管道优化 111
7.2 优化多集合连接 113
7.2.1 连接顺序 115
7.2.2 优化图查找 116
7.3 聚合内存利用 118
7.4 在聚合管道中排序 119
7.4.1 索引聚合排序 119
7.4.2 磁盘排序 121
7.5 优化视图 122
7.6 小结 126
第8章插入、更新和删除 127
8.1 基础知识 127
8.1.1 过滤器优化 127
8.1.2 解释数据操作语句 128
8.1.3 索引开销 128
8.1.4 找到未使用的索引 129
8.1.5 写入策略 130
8.2 插入 130
8.2.1 批处理 130
8.2.2 克隆数据 132
8.2.3 从文件加载 134
8.3 更新 134
8.3.1 动态值批量更新 134
8.3.2 multi:true标志 135
8.3.3 upsert 136
8.3.4 使用$merge的批量upsert 137
8.4 删除 138
8.5 小结 138
第9章事务 139
9.1 事务理论 139
9.2 MongoDB事务 140
9.2.1 事务限制 141
9.2.2 TransientTransactionError 141
9.2.3 MongoDB驱动程序中的事务 143
9.2.4TransientTransactionError对
性能的影响 145
9.3 事务优化 146
9.3.1 避免事务 146
9.3.2 操作顺序 148
9.3.3 对热文档分区 149
9.4 小结 150
第10章服务器监控 152
10.1 主机级监控 152
10.1.1 网络 153
10.1.2 CPU 155
10.1.3 内存 156
10.1.4 磁盘IO 156
10.2 MongoDB服务器监控 156
10.2.1 Compass 156
10.2.2 Free Monitoring服务 157
10.2.3 Ops Manager 158
10.2.4 MongoDB Atlas 158
10.2.5 第三方监控工具 160
10.3 小结 160
第四部分 服务器调优
第11章内存调优 162
11.1 MongoDB内存架构 162
11.1.1 主机内