文档内冗余(MongoDB 示例)
文档内冗余(MongoDB 示例)
// 订单里冗余下单时的用户名与商品标题快照
{ _id: 1001, user: { id: 7, name: "ann" }, items: [ { sku: "a", title: "键盘" } ], total: 128 }
// 用户名变更时回填受影响订单(量级大时限定时间窗口并限速)
db.orders.updateMany(
{ "user.id": 7, createdAt: { $gte: ISODate("2026-01-01") } },
{ $set: { "user.name": "anne" } }
)| 适合冗余 | 变更频率低、读取频繁的展示字段(姓名、标题快照、类目名) |
|---|---|
| 不适合冗余 | 价格、库存、余额这类高频变更且要求强一致的值 |
| 搜索侧 | ES 不支持常规 join,常把关联数据拼进文档或用 nested;更新时同样要回写索引 |
评估冗余时把写路径成本也算进去:一次业务写入放大到 N 个位置更新的代价,可能超过读侧省下的开销。