选型

MongoDB

你可能会说

产品经理天天改字段,我是不是该把 MySQL 换成 MongoDB?

把一整份文档存起来的数据库一条记录就是一个 JSON 风格的文档,字段可以不一样,不用先建表改表。适合结构经常变、总是整份读写的场景;跨多个文档的事务和复杂统计是它的弱项。
也常被叫作Mongo文档数据库
先问一句字段老在变?
默认MongoDB→擅长整份文档读写→别用多表事务报表
成熟度试验

什么时候选它

  • 结构不固定、经常加字段的内容:商品详情、表单、配置
  • 整份读写的文档型数据:文章、埋点事件、会话记录
  • 快速原型:不用先设计表结构
  • 写入量需要水平扩展、数据天然能按分片键分布

什么时候别选

  • 多表强关联、跨集合事务密集的业务(订单、账务)
  • 复杂聚合报表、需要严格约束和 JOIN 的系统
  • 团队不熟索引和分片设计,容易写成全表扫描
容易混在一起 · 怎么分
MongoDB≠MySQL

Mongo 存文档、结构灵活、按分片扩展;MySQL 存表、约束强、JOIN 和事务成熟。

MongoDB≠文件存储

文档仍然可以建索引、按字段查询、做聚合,不是把 JSON 直接扔进硬盘。

MongoDB 事务≠关系库事务

它支持多文档事务,但代价和适用面与关系库不同,别默认它「什么都能事务」。

Q面试会问什么

  • 问:MongoDB 适合什么?
    答:结构灵活、整份文档读写、需要水平扩展的场景;强关联和复杂报表不适合。
  • 问:查询为什么慢?
    答:常见原因是没建对索引、文档太大、分片键选错导致广播查询。
  • 问:它和关系库怎么选?
    答:先看数据是否天然是一份文档、是否经常整份读写;要跨表事务和强约束就留在关系库。
延伸阅读 · 权威出处