MongoDB 核心概念
MongoDB 是一个面向文档(Document-Oriented)的 NoSQL 数据库
核心特征:
- 文档模型(BSON)
- 无固定 Schema(Schema-less)
- 高可扩展(Replica Set + Sharding)
- 高可用(自动故障转移)
📌 本质目标:
牺牲部分强一致性,换取高可用和高扩展性
- 逻辑隔离单位
- 类似 MySQL 的 database / PostgreSQL 的 schema+db
常见系统库:
- admin:管理
- local:复制集本地数据(oplog)
- config:分片元数据
- 类似表(table)
- 同一集合文档结构可以不同
- 无强制 schema
📌 设计原则:
一个集合 = 一个业务实体
- BSON(Binary JSON)
- 最大 16MB
示例:
{
"_id": ObjectId("..."),
"name": "Tom",
"age": 18,
"tags": ["a", "b"]
}
- 主键
- 默认 ObjectId
- 唯一索引自动创建
| 对比项 | JSON | BSON |
|---|---|---|
| 类型 | 少 | 多(Date, Binary, Decimal128) |
| 解析 | 慢 | 快 |
| 存储 | 文本 | 二进制 |
📌 MongoDB 内部全部使用 BSON
- 数据库服务进程
- 负责数据存储、查询、复制
- 分片集群的路由
- 不存数据
- 存储分片元数据
- 必须是复制集
- Primary:写
- Secondary:读 + 备份
- Arbiter:投票(不存数据)
- 写入 Primary
- 同步到 Secondary
- Primary 挂了 -> 自动选举
📌 最终一致性
- 操作日志
- Secondary 重放 oplog 同步数据
- 单机容量、IO、CPU 有上限
| 概念 | 说明 |
|---|---|
| Shard | 实际存数据 |
| Chunk | 数据分片单位 |
| Shard Key | 决定数据分布 |
- 高基数
- 均匀分布
- 非单调递增
推荐:
hashed(_id)
hashed(user_id)
{ w: "majority" }
primary / secondary / nearest
local / majority / snapshot
📌 可调一致性
- 4.0:副本集
- 4.2:分片集群
- ACID
- 性能开销大
- 不推荐大事务
核心特性
- 文档级锁
- MVCC
- 压缩
- Checkpoint
📌 MongoDB 性能核心来源
支持索引类型:
- 单字段
- 复合索引
- 唯一索引
- TTL
- Text
- Geo
📌 索引也是 BSON + B-Tree
| 对比 | MongoDB | MySQL |
|---|---|---|
| Schema | 灵活 | 固定 |
| Join | 弱 | 强 |
| 扩展 | 水平 | 垂直 |
| 事务 | 支持但慎用 | 强 |
✅ 适用
- 内容管理
- 日志
- 用户画像
- IoT
- 商品信息
❌ 不适用
- 强事务金融
- 复杂多表 Join
MongoDB 是一个面向文档的分布式数据库, 通过复制集实现高可用,通过分片实现水平扩展, 一致性通过 Write / Read Concern 调节, 以 WiredTiger 作为高性能存储引擎。