《MongoDB 权威指南》笔记二
2024/9/29大约 3 分钟
《MongoDB 权威指南》笔记二
《MongoDB 权威指南》 学习笔记
第 5 章 索引
索引是用于提升查询效率的存储结构。不使用索引的查询称为集合扫描(COLLSCAN)。
db.users.createIndex({"username" : 1})复合索引适用于多字段查询/排序:
db.users.createIndex({"age" : 1, "username" : 1})explain
何时不使用索引
索引类型
索引管理
第 6 章 特殊的索引和集合类型
地理空间索引
全文搜索索引
固定集合
TTL 索引
使用 GridFS 存储文件
第 7 章 聚合框架
管道、阶段和可调参数
阶段入门:常见操作
表达式
$project
$unwind
数组表达式
累加器
分组简介
将聚合管道结果写入集合中
第 8 章 事务
第 9 章 应用程序设计
第 10 章 创建副本集
副本集设计
副本集 = 一组服务器,一个 primary + 多个 secondary。primary 崩溃时自动选举新 primary。
核心原理:基于 Raft 共识协议,需半数以上节点同意才能选举 primary,防止脑裂。
推荐集群模式:
- 主数据中心优先:大多数成员放在主数据中心,保证主节点始终在此。主数据中心不可用时,备份数据中心无法选主
- 三地点僵局打破:两数据中心各放相同数量成员,第三地放一个打破僵局
选举机制
- 从节点无法连通 primary 时,请求其他成员将自己选举为主节点
- 其他成员检查:能否连通现有 primary、发起者是否有最新数据、是否有更高优先级成员
- 心跳:每 2 秒发送一次,10 秒无响应标记为不可达
- 优先级:高优先级从节点更快发起选举且更可能成为 primary
- primary 必须拥有最新复制数据才能当选
- MongoDB 3.2 引入 Raft 共识协议
第 11 章 副本集的组成
同步
- oplog:主节点 local 数据库中的固定集合,记录每次写操作
- 从节点通过查询 oplog 复制操作,每个从节点也维护自己的 oplog
- 从节点重启后从最后一个 oplog 操作开始同步
- oplog 操作是幂等的,多次执行与一次执行效果相同
心跳
- 每 2 秒发送心跳,检查成员状态
- primary 失去大多数节点支持时自动降级为 secondary
选举
- 无法访问 primary 的成员申请选举
- 获得大多数选票的成员转换为 PRIMARY 状态
回滚
primary 写操作后停止运行,从节点未复制该操作 → 新 primary 可能丢失该写操作
第 12 章 从应用程序连接副本集
第 13 章 管理
第 14 章 分片简介
- MongoDB 支持自动分片
- mongos 进程负责分片路由,维护数据分布目录,转发请求并合并响应
- 片键(shard key):拆分数据的一个或多个字段
- 定向查询:包含片键,发送到单个分片或分片子集
- 分散–收集查询(广播查询):发送到所有分片
第 15 章 配置分片
均衡器
- 负责数据迁移,定期检查分片间是否不均衡(块数量达到阈值)
- MongoDB 3.4+:均衡器位于配置服务器副本集的 primary 上