Skip to content

MongoDB技术栈总览

一句话定位:MongoDB 是 C++ 写的、面向文档存储的分布式 NoSQL 数据库——用 BSON(二进制 JSON)文档取代表,用副本集(Replica Set)保证高可用、分片集群(Sharded Cluster)保证水平扩展;「功能最丰富、最像关系型」的 NoSQL,适合文档化、快速迭代、高伸缩场景。

NoSQL vs SQL(为什么选它)

维度SQL(关系型)NoSQL(MongoDB)
存储表、行、列(结构化)文档/键值/图(BSON 动态结构)
结构预定义 schema,改结构难模式自由,随需求演进
扩展纵向扩展(升配)横向扩展(加节点)
查询SQL 标准UnQl(非标准,类似面向对象)
事务ACIDBASE(基本可用/软状态/最终一致)
代表MySQL / PostgreSQL / OracleMongoDB / Redis / HBase

选型口诀(7 问任一 Yes 考虑 MongoDB,≥2 个 Yes 就选它):无事务/复杂 join · 需求易变想快速迭代 · 2000+ QPS · TB/PB 级数据 · 需快速水平扩展 · 数据不丢 · 99.999% 高可用 · 大量地理位置/文本查询。

核心概念(库 / 集合 / 文档)

MongoDB关系型对照说明
databasedatabase一个实例可容纳多个独立库(默认 db
collection(集合)table文档组,无固定结构
document(文档)row一组 BSON key-value,同集合文档字段可不一致
field(字段)column键值对的 key
namespace库名.集合名(如 db.user
  • 进程:mongod(服务端,默认端口 27017、数据目录 /data/db)、mongo(客户端 shell)、mongos(分片路由)。
  • 命令:use db(切库/建库)、show dbs(看库列表)。

数据结构(BSON)

BSON = Binary JSON,二进制序列化,支持内嵌文档与数组。常用类型:String / Integer / Boolean / Array / Date / Binary Data / Code(JS)/ Regular Expression。

索引

  • 作用:避免全集合扫描(无索引时大集合查询几十秒)。
  • 类型:单字段 / 复合 / 多键(数组)/ 全文 / Hash / 通配符
  • 特性:任何字段都可建索引;子文档索引顺序敏感A:{B,C} 建的索引,A:{C,B} 查不到)。

应用场景(为什么用它)

  • 游戏:用户装备/积分内嵌文档存储。
  • 物流:订单状态变更用内嵌数组,一次查询读全。
  • 社交:用户信息 + 朋友圈 + 地理位置索引(附近的人)。
  • 物联网:设备信息 + 日志多维分析。
  • 视频直播:用户/礼物信息。
  • 通用:网站实时数据、数据缓存层、对象/JSON 存储、高伸缩场景。

不适用:高度事务系统(银行/会计)、传统 BI、复杂 SQL 场景。

常见误解

  • 以为 MongoDB 能当关系型用(强事务/join)→ 它无 ACID 事务、无 join,是 BASE 模型。
  • 以为 MongoDB 内存存储 → 它持久化到磁盘(只是写延迟刷盘,默认 60s 内),不是纯内存库。
  • 以为 NoSQL 就是"没有 SQL" → Not Only SQL,是"不只是 SQL"。

关联

最近更新