MongoDB 权威指南

MongoDB 权威指南
编辑推荐
上一版广受好评,新版本在此基础上大幅扩充,内容更加全面、深入
MongoDB 项目组成员倾力打造
MongoDB 基础知识、进阶内容、高级管理任务一应俱全
内容简介
与传统的关系型数据库不同,MongoDB 是一种面向文档的数据库。这一版共分为六部分,涵盖开发、管理以及部署的各个方面。展示 MongoDB 基础知识、核心概念。第二部分介绍使用 MongoDB 进行开发,包括索引的概念以及各种特殊索引和集合的用法等。第三部分讲述复制,包括副本集的相关概念、创建方法,与应用程序的交互等。第四部讨论分片,包括分片的配置,片键的选择,集群的管理。第五部分阐述创建索引、移动和压缩数据等管理任务,以及 MongoDB 的持久数据存储。一部分集中说明服务器管理。
作者简介
Kristina Chodorow,谷歌软件工程师,曾有 5 年是 MongoDB 项目的核心成员。她领导了 MongoDB 的副本集开发,并编写了 PHP 和 Perl 驱动程序。
译者简介
邓强,软件工程师,常年关注互联网行业,对互联网产品和技术兴趣浓厚,Apple 粉、Google 粉。职业生涯的前几年一直从事金融行业软件系统开发,后来不顾一切投身互联网。目前在一个新成立的互联网创业小团队任职。
目录
第一部分 MongoDB 介绍
第 1 章 MongoDB 简介
- 1.1 易于使用
- 1.2 易于扩展
- 1.3 丰富的功能
- 1.4 卓越的性能
- 1.5 小结
第 2 章 MongoDB 基础知识
- 2.1 文档
- 2.2 集合
- 2.2.1 动态模式
- 2.2.2 命名
- 2.3 数据库
- 2.4 启动 MongoDB
- 2.5 MongoDB shell 简介
- 2.5.1 运行 shell
- 2.5.2 MongoDB 客户端
- 2.5.3 shell 中的基本操作
- 2.6 数据类型
- 2.6.1 基本数据类型
- 2.6.2 日期
- 2.6.3 数组
- 2.6.4 内嵌文档
- 2.6.5 _id 和 ObjectId
- 2.7 使用 MongoDB shell
- 2.7.1 shell 小贴士
- 2.7.2 使用 shell 执行脚本
- 2.7.3 创建。mongorc.js 文件
- 2.7.4 定制 shell 提示
- 2.7.5 编辑复合变量
- 2.7.6 集合命名注意事项
第 3 章 创建、更新和删除文档
- 3.1 插入并保存文档
- 3.1.1 批量插入
- 3.1.2 插入校验
- 3.2 删除文档
- 3.3 更新文档
- 3.3.1 文档替换
- 3.3.2 使用修改器
- 3.3.3 upsert
- 3.3.4 更新多个文档
- 3.3.5 返回被更新的文档
- 3.4 写入安全机制
第 4 章 查询
- 4.1 find 简介
- 4.1.1 指定需要返回的键
- 4.1.2 限制
- 4.2 查询条件
- 4.2.1 查询条件
- 4.2.2 OR 查询
- 4.2.3 $not
- 4.2.4 条件语义
- 4.3 特定类型的查询
- 4.3.1 null
- 4.3.2 正则表达式
- 4.3.3 查询数组
- 4.3.4 查询内嵌文档
- 4.4 $where 查询
- 4.5 游标
- 4.5.1 limit、skip 和 sort
- 4.5.2 避免使用 skip 略过大量结果
- 4.5.3 高级查询选项
- 4.5.4 获取一致结果
- 4.5.5 游标生命周期
- 4.6 数据库命令
第二部分 设计应用
第 5 章 索引
- 5.1 索引简介
- 5.1.1 复合索引简介
- 5.1.2 使用复合索引
- 5.1.3 $ 操作符如何使用索引
- 5.1.4 索引对象和数组
- 5.1.5 索引基数
- 5.2 使用 explain()和 hint()
- 5.3 何时不应该使用索引
- 5.4 索引类型
- 5.4.1 唯一索引
- 5.4.2 稀疏索引
- 5.5 索引管理
- 5.5.1 标识索引
- 5.5.2 修改索引
第 6 章 特殊的索引和集合
- 6.1 固定集合
- 6.1.1 创建固定集合
- 6.1.2 自然排序
- 6.1.3 循环游标
- 6.1.4 没有_id 索引的集合
- 6.2 TTL 索引
- 6.3 全文本索引
- 6.3.1 搜索语法
- 6.3.2 优化全文本搜索
- 6.3.3 在其他语言中搜索
- 6.4 地理空间索引
- 6.4.1 地理空间查询的类型
- 6.4.2 复合地理空间索引
- 6.4.3 2d 索引
- 6.5 使用 GridFS 存储文件
- 6.5.1 GridFS 入门
- 6.5.2 在 MongoDB 驱动程序中使用 GridFS
- 6.5.3 揭开 GridFS 的面纱
第 7 章 聚合
- 7.1 聚合框架
- 7.2 管道操作符
- 7.2.1 $match
- 7.2.2 $project
- 7.2.3 $group
- 7.2.4 $unwind
- 7.2.5 $sort
- 7.2.6 $limit
- 7.2.7 $skip
- 7.2.8 使用管道
- 7.3 MapReduce
- 7.3.1 示例 1:找出集合中的所有键
- 7.3.2 示例 2:网页分类
- 7.3.3 MongoDB 和 MapReduce
- 7.4 聚合命令
- 7.4.1 count
- 7.4.2 distinct
- 7.4.3 group
第 8 章 应用程序设计
- 8.1 范式化与反范式化
- 8.1.1 数据表示的例子
- 8.1.2 基数
- 8.1.3 好友、粉丝,以及其他的麻烦事项
- 8.2 优化数据操作
- 8.2.1 优化文档增长
- 8.2.2 删除旧数据
- 8.3 数据库和集合的设计
- 8.4 一致性管理
- 8.5 模式迁移
- 8.6 不适合使用 MongoDB 的场景
第三部分 复制
第 9 章 创建副本集
- 9.1 复制简介
- 9.2 建立副本集
- 9.3 配置副本集
- 9.3.1 rs 辅助函数
- 9.3.2 网络注意事项
- 9.4 修改副本集配置
- 9.5 设计副本集
- 9.6 成员配置选项
- 9.6.1 选举仲裁者
- 9.6.2 优先级
- 9.6.3 隐藏成员
- 9.6.4 延迟备份节点
- 9.6.5 创建索引
第 10 章 副本集的组成
- 10.1 同步
- 10.1.1 初始化同步
- 10.1.2 处理陈旧数据
- 10.2 心跳
- 10.3 选举
- 10.4 回滚
第 11 章 从应用程序连接副本集
- 11.1 客户端到副本集的连接
- 11.2 等待写入复制
- 11.2.1 可能导致错误的原因
- 11.2.2 “w"的其他值
- 11.3 自定义复制保证规则
- 11.3.1 保证复制到每个数据中心的一台服务器上
- 11.3.2 保证写操作被复制到可见节点中的“大多数”
- 11.3.3 创建其他规则
- 11.4 将读请求发送到备份节点
- 11.4.1 出于一致性考虑
- 11.4.2 出于负载的考虑
- 11.4.3 何时可以从备份节点读取数据
第 12 章 管理
- 12.1 以单机模式启动成员
- 12.2 副本集配置
- 12.2.1 创建副本集
- 12.2.2 修改副本集成员
- 12.2.3 创建比较大的副本集
- 12.2.4 强制重新配置
- 12.3 修改成员状态
- 12.3.1 把主节点变为备份节点
- 12.3.2 阻止选举
- 12.3.3 使用维护模式
- 12.4 监控复制
- 12.4.1 获取状态
- 12.4.2 复制图谱
- 12.4.3 复制循环
- 12.4.4 禁用复制链
- 12.4.5 计算延迟
- 12.4.6 调整 oplog 大小
- 12.4.7 从延迟备份节点中恢复
- 12.4.8 创建索引
- 12.4.9 在预算有限的情况下进行复制
- 12.4.10 主节点如何跟踪延迟
- 12.5 主从模式
- 12.5.1 从主从模式切换到副本集模式
- 12.5.2 让副本集模仿主从模式的行为
第四部分 分片
第 13 章 分片
- 13.1 分片简介
- 13.2 理解集群的组件
- 13.3 快速建立一个简单的集群
第 14 章 配置分片
- 14.1 何时分片
- 14.2 启动服务器
- 14.2.1 配置服务器
- 14.2.2 mongos 进程
- 14.2.3 将副本集转换为分片
- 14.2.4 增加集群容量
- 14.2.5 数据分片
- 14.3 MongoDB 如何追踪集群数据
- 14.3.1 块范围
- 14.3.2 拆分块
- 14.4 均衡器
第 15 章 选择片键
- 15.1 检查使用情况
- 15.2 数据分发
- 15.2.1 升序片键
- 15.2.2 随机分发的片键
- 15.2.3 基于位置的片键
- 15.3 片键策略
- 15.3.1 散列片键
- 15.3.2 GridFS 的散列片键
- 15.3.3 流水策略
- 15.3.4 多热点
- 15.4 片键规则和指导方针
- 15.4.1 片键限制
- 15.4.2 片键的势
- 15.5 控制数据分发
- 15.5.1 对多个数据库和集合使用一个集群
- 15.5.2 手动分片
第 16 章 分片管理
- 16.1 检查集群状态
- 16.1.1 使用 sh.status 查看集群摘要信息
- 16.1.2 检查配置信息
- 16.2 查看网络连接
- 16.2.1 查看连接统计
- 16.2.2 限制连接数量
- 16.3 服务器管理
- 16.3.1 添加服务器
- 16.3.2 修改分片的服务器
- 16.3.3 删除分片
- 16.3.4 修改配置服务器
- 16.4 数据均衡
- 16.4.1 均衡器
- 16.4.2 修改块大小
- 16.4.3 移动块
- 16.4.4 特大块
- 16.4.5 刷新配置
第五部分 应用管理
第 17 章 了解应用的动态
- 17.1 了解正在进行的操作
- 17.1.1 寻找有问题的操作
- 17.1.2 终止操作的执行
- 17.1.3 假象
- 17.1.4 避免幽灵操作
- 17.2 使用系统分析器
- 17.3 计算空间消耗
- 17.3.1 文档
- 17.3.2 集合
- 17.3.3 数据库
- 17.4 使用 mongotop 和 monogostat
第 18 章 数据管理
- 18.1 配置身份验证
- 18.1.1 身份验证基本原理
- 18.1.2 配置身份验证
- 18.1.3 身份验证的工作原理
- 18.2 建立和删除索引
- 18.2.1 在独立的服务器上建立索引
- 18.2.2 在副本集上建立索引
- 18.2.3 在分片集群上建立索引
- 18.2.4 删除索引
- 18.2.5 注意内存溢出杀手
- 18.3 预热数据
- 18.3.1 将数据库移至内存
- 18.3.2 将集合移至内存
- 18.3.3 自定义预热
- 18.4 压缩数据
- 18.5 移动集合
- 18.6 预分配数据文件
第 19 章 持久性
- 19.1 日记系统的用途
- 19.1.1 批量提交写入操作
- 19.1.2 设定提交时间间隔
- 19.2 关闭日记系统
- 19.2.1 替换数据文件
- 19.2.2 修复数据文件
- 19.2.3 关于 mongod.lock 文件
- 19.2.4 隐蔽的异常退出
- 19.3 MongoDB 无法保证的事项
- 19.4 检验数据损坏
- 19.5 副本集中的持久性
第六部分 服务器管理
第 20 章 启动和停止 MongoDB
- 20.1 从命令行启动
- 20.2 停止 MongoDB
- 20.3 安全性
- 20.3.1 数据加密
- 20.3.2 SSL 安全连接
- 20.4 日志
第 21 章 监控 MongoDB
- 21.1 监控内存使用状况
- 21.1.1 有关电脑内存的介绍
- 21.1.2 跟踪监测内存使用状况
- 21.1.3 跟踪监测缺页中断
- 21.1.4 减少索引树的脱靶次数
- 21.1.5 IO 延迟
- 21.1.6 跟踪监测后台刷新平均时间
- 21.2 计算工作集的大小
- 21.3 跟踪监测性能状况
- 21.4 监控副本集
第 22 章 备份
- 22.1 对服务器进行备份
- 22.1.1 文件系统快照
- 22.1.2 复制数据文件
- 22.1.3 使用 mongodump
- 22.2 对副本集进行备份
- 22.3 对分片集群进行备份
- 22.3.1 备份和恢复整个集群
- 22.3.2 备份和恢复单独的分片
- 22.4 使用 mongooplog 进行增量备份
第 23 章 部署 MongoDB
- 23.1 设计系统结构
- 23.1.1 选择存储介质
- 23.1.2 推荐的 RAID 配置
- 23.1.3 CPU
- 23.1.4 选择操作系统
- 23.1.5 交换空间
- 23.1.6 文件系统
- 23.2 虚拟化
- 23.2.1 禁止内存过度分配
- 23.2.2 神秘的内存
- 23.2.3 处理网络磁盘的 IO 问题
- 23.2.4 使用非网络磁盘
- 23.3 系统配置
- 23.3.1 禁用 NUMA
- 23.3.2 更智能地预读取数据
- 23.3.3 禁用大内存页面
- 23.3.4 选择一种磁盘调度算法
- 23.3.5 不要记录访问时间
- 23.3.6 修改限制
- 23.4 网络配置
- 23.5 系统管理
- 23.5.1 时钟同步
- 23.5.2 OOM Killer
- 23.5.3 关闭定期任务
- 附录 A 安装 MongoDB
- 附录 B 深入 MongoDB