首页/数据/NoSQL 速查/NoSQL 常见使用反模式
选型与架构50 条

NoSQL 常见使用反模式

多数线上问题来自几类反模式:无界增长的数组与文档、未锚定的正则全扫、把搜索库当主存储、深分页、单调分片键热点、过量索引拖慢写入。识别手段是看查询清单与增长趋势,而不是等出故障再补。

NoSQL 速查数据更新于 2026-10-12

反模式与修正

反模式后果修正方向
文档内无界数组文档膨胀、写放大、达到 16MB 上限拆子集合或按时间窗分桶
未锚定正则 /^.*x/全集合扫描,CPU 高前缀锚定或用 text/搜索索引
把 ES 当主库用刷新、合并与恢复语义不适合交易数据主存储用数据库,ES 做检索副本
深分页 skip 十万每页越翻越慢键集/游标分页
单调键做分片键写热点集中在单个分片散列分片键或复合键
集合上建十几个索引写入放大、内存占用高按查询清单裁剪与合并索引

无界数组的改造示意

无界数组的改造示意
// 反模式:events 数组无限追加
// { _id: 1, events: [ ... 长期增长 ... ] }

// 修正:拆成子集合,按 (ownerId, ts) 建索引
db.user_events.insertOne({ ownerId: 1, ts: new Date(), type: "login" })
db.user_events.createIndex({ ownerId: 1, ts: -1 })
反模式的共同点是违背引擎的设计假设:先理解存储与索引机制(见 LSM、倒排索引等条目),再对照自己的查询与增长模式排查。

易错点

  • 用短生命周期的正则查询掩盖建模问题,数据量上涨后扫描成本成倍增加
  • 为每个可能字段建索引:写入延迟与内存上升,收益却来自少数高频查询

数据来源与参考

  • MongoDB Manual: Data modeling
  • Elasticsearch Guide: General recommendations
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌