《MONGODB实战》分三部分通过大量的实例代码介绍了MongoDB数据库底层的实现以及大型互联网Web项目数据库设计原则。第一部分对MongoDB进行了整体介绍,并介绍了实际的开发例子,另外还介绍了JavaScript shell和Ruby驱动。第二部分通过逐步实现一个电商数据模型和实现必要的CRUD操作来详细介绍了MongoDB的文档数据模型、查询语言和CRUD(新增、读取、更新和删除)操作。本书的第三后部分从数据库专家的角度来看待MongoDB,介绍了数据库的性能、部署、容错和伸缩性等所有的知识。
本书适合想深入学习MongoDB的开发人员,主要关注MongoDB数据库。
目录
- 第一部分 入门 1
- 第1章 全新Web数据库 3
- 1.1 为互联网而生 5
- 1.2 MongoDB键特性 5
- 1.2.1 文档数据模型 5
- 1.2.2 ad hoc查询 9
- 1.2.3 索引 9
- 1.2.4 复制 10
- 1.2.5 加速与持久化 11
- 1.2.6 伸缩 13
- 1.3 核心服务和工具 14
- 1.3.1 核心服务器 14
- 1.3.2 JavaScript shell 15
- 1.3.3 数据库驱动 15
- 1.3.4 命令行工具 16
- 1.4 为什么是MongoDB? 17
- 1.4.1 MongoDB与其他数据库对比 17
- 1.4.2 使用场景和部署 20
- 1.5 提示和限制 22
- 1.6 MongoDB历史 23
- 1.7 其他资源 25
- 1.8 总结 25
- 第2章 通过JavaScript shell操作MongoDB 27
- 2.1 Diving into the深入MongoDB shell 28
- 2.1.1 启动shell 28
- 2.1.2 数据库、集合和文档 28
- 2.1.3 插入和查询 29
- 2.1.4 更新文档 31
- 2.1.5 删除数据 35
- 2.1.6 shell的其他特性 35
- 2.2 使用索引创建和查询 36
- 2.2.1 创建大集合 36
- 2.2.2 索引和explain( ) 38
- 2.3 基本管理 42
- 2.3.1 获取数据库信息 43
- 2.3.2 命令如何执行 44
- 2.4 获取帮助 45
- 2.5 总结 47
- 第3章 编写代码操作MongoDB 48
- 3.1 通过Ruby lens连接MongoDB 49
- 3.1.1 安装与连接 49
- 3.1.2 Ruby里插入文档数据 50
- 3.1.3 查询与光标 51
- 3.1.4 更新和删除 52
- 3.1.5 数据库命令 53
- 3.2 驱动工作原理 54
- 3.3 构建简单的应用 56
- 3.3.1 设置 56
- 3.3.2 搜集数据 57
- 3.3.3 查看存档 60
- 3.4 总结 63
- 第二部分 MongoDB应用系统开发 65
- 第4章 面向文档的数据 67
- 4.1 schema设计原则 67
- 4.2 设计电商网站数据模型 69
- 4.2.1 schema基础知识 69
- 4.2.2 用户和订单 73
- 4.2.3 评价 75
- 4.3 核心概念:数据库、集合、文档 76
- 4.3.1 数据库 76
- 4.3.2 集合 79
- 4.3.3 文档和插入 83
- 4.4 总结 87
- 第5章 构建查询 88
- 5.1 电子商务查询 88
- 5.1.1 产品、类别和评论 88
- 5.1.2 用户和订单 91
- 5.2 MongoDB的查询语言 92
- 5.2.1 查询条件和选择器 92
- 5.2.2 查询选择 104
- 5.3 总结 106
- 第6章 聚合 107
- 6.1 聚合框架概览 108
- 6.2 电商聚合例子 109
- 6.2.1 商品、类别和评价 111
- 6.2.2 用户和订单 117
- 6.3 聚合管道操作符 120
- 6.3.1 $project 120
- 6.3.2 $group 121
- 6.3.3 $match、$sort、$skip、$limit 123
- 6.3.4 $unwind 123
- 6.3.5 $out 124
- 6.4 重塑文档 124
- 6.4.1 字符串函数 125
- 6.4.2 算术运算函数 126
- 6.4.3 日期函数 126
- 6.4.4 逻辑函数 127
- 6.4.5 集合操作符 128
- 6.4.6 其他函数 129
- 6.5 理解聚合管道性能 129
- 6.5.1 聚合管道选项 130
- 6.5.2 聚合框架的explain( )函数 130
- 6.5.3 allowDiskUse 选项 134
- 6.5.4 聚合光标选项 134
- 6.6 其他聚合功能 135
- 6.6.1 .count( )和.distinct( ) 135
- 6.6.2 map-reduce 136
- 6.7 总结 138
- 第7章 更新、原子操作和删除 140
- 7.1 文档更新概要 141
- 7.1.1 通过替换修改 141
- 7.1.2 通过操作符修改 142
- 7.1.3 比较两个方法 142
- 7.1.4 决定:替换与操作符 143
- 7.2 电商数据模型更新 144
- 7.2.1 商品和目录 144
- 7.2.2 评价 148
- 7.2.3 订单 150
- 7.3 原子文档处理 152
- 7.3.1 订单状态转换 153
- 7.3.2 库存管理 155
- 7.4 核心要点:MongoDB更新与删除 160
- 7.4.1 更新类型与参数选项 160
- 7.4.2 更新操作符 161
- 7.4.3 findAndModify命令 169
- 7.4.4 删除 169
- 7.4.5 并发、原子性和隔离 170
- 7.4.6 更新性能注意事项 171
- 7.5 复习更新操作符 172
- 7.6 总结 173
- 第三部分 精通MongoDB 175
- 第8章 索引与查询优化 177
- 8.1 索引理论 177
- 8.1.1 精心策划的实验 178
- 8.1.2 核心索引概念 181
- 8.1.3 B-树 185
- 8.2 索引实战 186
- 8.2.1 索引类型 186
- 8.2.2 索引管理 189
- 8.3 查询优化 194
- 8.3.1 找出慢速查询 195
- 8.3.2 检查慢速查询 199
- 8.3.3 查询模式 217
- 8.4 总结 219
- 第9章 文本搜索 220
- 9.1 文本搜索—不仅仅是模式匹配 221
- 9.1.1 文本搜索与模式匹配 222
- 9.1.2 文本搜索与网页搜索 223
- 9.1.3 MongoDB文本搜索与专业搜索引擎 225
- 9.2 下载曼宁图书类别数据 228
- 9.3 定义文本搜索索引 229
- 9.3.1 文本索引的大小 230
- 9.3.2 分配索引名字并为集合里的所有字段建立索引 231
- 9.4 基本的文本搜索 232
- 9.4.1 更复杂的搜索 233
- 9.4.2 文本搜索分数 235
- 9.4.3 根据文本搜索分数排序结果 236
- 9.5 聚合框架文本搜索 237
- 9.6 文本搜索语言 240
- 9.6.1 在索引里指定语言 241
- 9.6.2 在文档里指定语言 242
- 9.6.3 在搜索中指定语言 243
- 9.6.4 可用的语言 245
- 9.7 总结 245
- 第10章 WiredTiger与可拔插存储 246
- 10.1 可拔插存储引擎API 246
- 10.2 WiredTiger 248
- 10.2.1 切换到WiredTiger 248
- 10.2.2 迁移数据到WiredTiger 249
- 10.3 与MMAPv1对比 250
- 10.3.1 配置文件 251
- 10.3.2 插入脚本与基准测试脚本 252
- 10.3.3 插入测试结果 255
- 10.3.4 读性能测试脚本 256
- 10.3.5 读性能结果 257
- 10.3.6 测试结论 259
- 10.4 其他可拔插存储引擎的例子 260
- 10.5 高级主题 261
- 10.5.1 可拔插引擎如何工作? 261
- 10.5.2 数据结构 263
- 10.5.3 锁 265
- 10.6 总结 265
- 第11章 复制 267
- 11.1 复制概览 267
- 11.1.1 为什么复制很重要 268
- 11.1.2 复制的使用场景和限制 269
- 11.2 可复制集 270
- 11.2.1 安装 270
- 11.2.2 可复制集群工作原理 277
- 11.2.3 管理 283
- 11.3 驱动与复制 291
- 11.3.1 连接与故障转移 291
- 11.3.2 写关注点 293
- 11.3.3 读伸缩 294
- 11.3.4 标签 296
- 11.4 总结 298
- 第12章 使用分片集群扩展系统 299
- 12.1 分片集群概述 300
- 12.1.1 什么是分片集群 300
- 12.1.2 什么时候分片? 301
- 12.2 理解分片集群的组件 302
- 12.2.1 分片:存储应用程序数据 303
- 12.2.2 mongos路由:路由操作 303
- 12.2.3 配置服务器:存储元数据 303
- 12.3 在分片集群中分散数据 304
- 12.3.1 分片集群中的数据分散方式 305
- 12.3.2 分布式数据库分片 306
- 12.3.3 集合分片 306
- 12.4 构建一个例子分片集群 307
- 12.4.1 启动mongod和mongos服务器 308
- 12.4.2 配置集群 310
- 12.4.3 分片集合 311
- 12.4.4 写入数据到分片集群 312
- 12.5 分片集群查询和建立索引 318
- 12.5.1 查询路由 318
- 12.5.2 分片集群中建立索引 319
- 12.5.3 分片集群中的explain()工具 320
- 12.5.4 分片集群中聚合 322
- 12.6 选择分片键 322
- 12.6.1 非平衡写入(热点) 323
- 12.6.2 不可分割的数据块(粗粒度) 324
- 12.6.3 糟糕的定位(分片键不在查询中) 325
- 12.6.4 理想的分片键 325
- 12.6.5 设计折中(email应用) 326
- 12.7 生产环境下分片集群 328
- 12.7.1 配置 328
- 12.7.2 部署 330
- 12.7.3 维护 332
- 12.8 总结 336
- 第13章 部署与管理 337
- 13.1 硬件与配置 337
- 13.1.1 集群拓扑 337
- 13.1.2 部署环境 339
- 13.1.3 配置 344
- 13.2 监控与诊断 346
- 13.2.1 日志 346
- 13.2.2 诊断命令 347
- 13.2.3 诊断工具 347
- 13.2.4 监控服务 349
- 13.2.5 外部监控应用 349
- 13.3 备份 350
- 13.3.1 mongodump和mongorestore 350
- 13.3.2 基于数据文件的备份 351
- 13.3.3 MMS备份 352
- 13.4 安全 352
- 13.4.1 安全环境 353
- 13.4.2 网络安全 353
- 13.4.3 验证 356
- 13.4.4 可复制集验证 359
- 13.4.5 分片集群验证 360
- 13.4.6 企业安全特性 360
- 13.5 管理任务 360
- 13.5.1 数据导入和导出 360
- 13.5.2 压缩和修复 361
- 13.5.3 升级 363
- 13.6 性能故障排除 363
- 13.6.1 工作集 363
- 13.6.2 性能悬崖 364
- 13.6.3 查询交互 365
- 13.6.4 寻求专业帮助 366
- 13.7 部署检查列表 366
- 13.8 总结 367
- 附录A 安装 368
- A.1 安装 368
- A.1.1 生产部署 368
- A.1.2 32位和64位 369
- A.2 Linux下安装MongoDB 369
- A.2.1 使用预编译二进制文件安装 369
- A.2.2 使用包管理器 370
- A.3 Mac OS X下安装MongoDB 370
- A.3.1 预编译二进制版本 370
- A.3.2 使用包管理器 371
- A.4 Windows下安装MongoDB 372
- A.5 从源码编译MongoDB 373
- A.6 故障排除 373
- A.6.1 错误的架构 373
- A.6.2 不存在的数据目录 374
- A.6.3 缺少权限 374
- A.6.4 未绑定端口 374
- A.7 基本配置选项 374
- A.8 安装Ruby 376
- A.8.1 Linux和Mac OS X 376
- A.8.2 Windows 376
- 附录B 设计模式 377
- B.1 嵌入与引用 377
- B.2 一对多 377
- B.3 多对多 378
- B.4 树 379
- B.5 工作队列 382
- B.6 动态特性 383
- B.7 事务 384
- B.8 定位与预计算 385
- B.9 反模式 386
- B.9.1 粗心索引 386
- B.9.2 交错类型 386
- B.9.3 单一集合 386
- B.9.4 大型、深嵌文档 386
- B.9.5 一个用户一个集合 387
- B.9.6 不可分片集合 387
- 附录C 二进制数据和网格文件系统 388
- C.1 简单二进制存储 388
- C.1.1 存储缩略图 389
- C.1.2 存储MD5 389
- C.2 网格文件 390
- C.2.1 Ruby中的GridFS 391
- C.2.2 使用mongofiles操作GridFS 393