文档库扩展
CouchDB、RethinkDB;对照 MongoDB。
30 分钟
文档库扩展
MongoDB 是文档 NoSQL 的默认答案,但 CouchDB、RethinkDB 等在同步模型、实时推送上有独特设计。本课不是重复 mongo-intro,而是 拓宽文档库视野,避免「只有 Mongo 一种文档库」。
学习目标
- 对照 MongoDB 理解 CouchDB 的 MVCC 与离线同步
- 了解 RethinkDB 实时 changefeed 的历史定位
- 说清何时仍选 MongoDB、何时看 CouchDB / 托管 dynamodb-essentials
文档库共性
| 特性 | 说明 |
|---|---|
| Schema 灵活 | 嵌套 JSON/BSON,字段可演进 |
| 水平扩展 | 分片(MongoDB sharding、CouchDB 集群) |
| 弱 JOIN | 嵌入或应用层组装,见 orm-normalization 反范式讨论 |
// 文档嵌套示例(MongoDB / CouchDB 均常见)
{
"_id": "order-1001",
"items": [{ "sku": "A", "qty": 2 }],
"shipping": { "city": "Shanghai" }
}
关系库需拆 order、order_item、address;文档库 读一次拿全量 是主要收益。
CouchDB:离线优先
- 多主复制 + MVCC:冲突用 revision 链解决,适合 移动端离线编辑、后续同步
- HTTP REST 原生:与 Couchbase 生态衔接(Couchbase = CouchDB 演进 + 内存层)
- MapReduce 视图:二级索引方式与 MongoDB 聚合管道不同
适合:字段 App、边缘同步;不适合:复杂事务报表 → 仍走 postgresql-essentials。
RethinkDB:实时 changefeed
- 查询结果 订阅式推送(changefeed),曾对标实时仪表板
- 项目曾停更后社区重启;新项目需评估维护风险
- 实时场景 today 常见替代:MongoDB Change Streams、elasticsearch-essentials + Kafka
选型速查
| 需求 | 倾向 |
|---|---|
| 生态、聚合、Spring Data | MongoDB(本栈 mongo-spring) |
| 离线同步、冲突合并 | CouchDB / Couchbase |
| AWS 全托管、按量 | DynamoDB |
| 权威事务 + JSON 列 | PostgreSQL JSONB |