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

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了