Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

MongoDB 核心概念

一、MongoDB 是什么?

MongoDB 是一个面向文档(Document-Oriented)的 NoSQL 数据库

核心特征:

  • 文档模型(BSON)
  • 无固定 Schema(Schema-less)
  • 高可扩展(Replica Set + Sharding)
  • 高可用(自动故障转移)

📌 本质目标:

牺牲部分强一致性,换取高可用和高扩展性

二、MongoDB 核心数据模型

1️⃣ Database(数据库)

  • 逻辑隔离单位
  • 类似 MySQL 的 database / PostgreSQL 的 schema+db

常见系统库:

  • admin:管理
  • local:复制集本地数据(oplog)
  • config:分片元数据

2️⃣ Collection(集合)

  • 类似表(table)
  • 同一集合文档结构可以不同
  • 无强制 schema

📌 设计原则:

一个集合 = 一个业务实体

3️⃣ Document(文档)

  • BSON(Binary JSON)
  • 最大 16MB

示例:

{
  "_id": ObjectId("..."),
  "name": "Tom",
  "age": 18,
  "tags": ["a", "b"]
}

4️⃣ _id

  • 主键
  • 默认 ObjectId
  • 唯一索引自动创建

三、BSON vs JSON

对比项 JSON BSON
类型 多(Date, Binary, Decimal128)
解析
存储 文本 二进制

📌 MongoDB 内部全部使用 BSON

四、MongoDB 架构核心组件

1️⃣ mongod

  • 数据库服务进程
  • 负责数据存储、查询、复制

2️⃣ mongos

  • 分片集群的路由
  • 不存数据

3️⃣ config server

  • 存储分片元数据
  • 必须是复制集

五、高可用:Replica Set(复制集)

1️⃣ 组成

  • Primary:写
  • Secondary:读 + 备份
  • Arbiter:投票(不存数据)

2️⃣ 工作机制

  • 写入 Primary
  • 同步到 Secondary
  • Primary 挂了 -> 自动选举

📌 最终一致性

3️⃣ Oplog

  • 操作日志
  • Secondary 重放 oplog 同步数据

六、水平扩展:Sharding(分片)

1️⃣ 为什么要分片?

  • 单机容量、IO、CPU 有上限

2️⃣ 分片核心概念

概念 说明
Shard 实际存数据
Chunk 数据分片单位
Shard Key 决定数据分布

3️⃣ 分片键原则(必考)

  • 高基数
  • 均匀分布
  • 非单调递增

推荐:

hashed(_id)
hashed(user_id)

七、MongoDB 一致性模型

1️⃣ 写关注(Write Concern)

{ w: "majority" }

2️⃣ 读偏好(Read Preference)

primary / secondary / nearest

3️⃣ 读关注(Read Concern)

local / majority / snapshot

📌 可调一致性

八、事务(Transaction)

1️⃣ 支持版本

  • 4.0:副本集
  • 4.2:分片集群

2️⃣ 特点

  • ACID
  • 性能开销大
  • 不推荐大事务

九、存储引擎:WiredTiger

核心特性

  • 文档级锁
  • MVCC
  • 压缩
  • Checkpoint

📌 MongoDB 性能核心来源

十、索引机制

支持索引类型:

  • 单字段
  • 复合索引
  • 唯一索引
  • TTL
  • Text
  • Geo

📌 索引也是 BSON + B-Tree

十一、MongoDB vs 关系型数据库

对比 MongoDB MySQL
Schema 灵活 固定
Join
扩展 水平 垂直
事务 支持但慎用

十二、MongoDB 适用 & 不适用场景

✅ 适用

  • 内容管理
  • 日志
  • 用户画像
  • IoT
  • 商品信息

❌ 不适用

  • 强事务金融
  • 复杂多表 Join

十三、总结

MongoDB 是一个面向文档的分布式数据库, 通过复制集实现高可用,通过分片实现水平扩展, 一致性通过 Write / Read Concern 调节, 以 WiredTiger 作为高性能存储引擎。