[mongodb]mongodb是什么(介绍1)

291 阅读3分钟

1/MongoDB 是什么?

MongoDB 是一个开源的 NoSQL 数据库,属于 文档型数据库 的类别。

它的核心特点是:

  • 使用类似 JSON 的 BSON 格式 存储数据
  • 无固定表结构(模式灵活)
  • 支持 水平扩展(分布式架构)

(1)MongoDB的存储结构是什么?

MongoDB 的存储结构, 区别于传统的关系型数据库(比如mysql),主要由如下三个单元组成:

  • 数据库(Database)
    mongodb中的数据库和mysql中的数据库是相似的概念.
    可以在 MongoDB 中创建多个数据库,每个数据库中有多个集合.

  • 集合(Collection)
    类似于关系型数据库中的表(Table).一个数据库中可以有多个集合.
    (类似于一个数据库中可以有多张表.)

  • 文档(Document)
    MongoDB 中最基本的单元, 由键值对(key-value)组成,类似于数据表中的行(Row)。
    也就是说,MongoDB 将数据记录存储为文档,这些文档聚集一起就是一个集合(及:一张表table)

SQL 与 MongoDB 常见术语对比

SQLMongoDB
表(Table)集合(Collection)
行(Row)文档(Document)
列(Col)字段(Field)
主键(Primary Key)对象 ID(Objectid)
索引(Index)索引(Index)
嵌套表(Embeded Table)嵌入式文档(Embeded Document)
数组(Array)数组(Array)

对象ID,其实就是文档的id, 就相当于每个文档的身份证,具有唯一性。(类似mysql中数据表中的主键,唯一标识表中的每一行数据.)

(2)市场定位

MongoDB 主要定位于:

  1. 灵活的数据模型场景 - 数据结构经常变化的应用
  2. 大数据量和高并发 - 适合互联网级应用
  3. 敏捷开发 - 快速迭代,无需预先严格定义表结构
  4. 替代或补充关系型数据库 - 在特定场景下提供更好的性能/灵活性

2/如何使用

基本操作示例:

// 插入文档
db.users.insertOne({
  name: "张三",
  age: 25,
  hobbies: ["编程", "阅读"],
  address: {
    city: "北京",
    street: "中关村"
  }
});

// 查询
db.users.find({ age: { $gt: 20 } });

// 更新
db.users.updateOne(
  { name: "张三" },
  { $set: { age: 26 } }
);

// 聚合查询
db.orders.aggregate([
  { $group: { _id: "$product", total: { $sum: "$amount" } } }
]);

部署方式:

  1. 单机部署 - 开发环境
  2. 副本集 - 生产环境高可用
  3. 分片集群 - 大数据量水平扩展

3/适合存储的数据类型

适合的场景

  1. JSON/文档型数据

    • 用户档案(动态属性)
    • 产品目录(变体多)
    • 社交媒体数据(点赞、评论、分享)
  2. 半结构化/无固定模式数据

    • 日志数据
    • IoT设备数据
    • 移动应用数据
  3. 需要快速迭代的项目

    • 初创公司MVP
    • 原型开发
    • A/B测试数据
  4. 大数据量高读写

    • 实时分析
    • 内容管理系统
    • 电商平台的商品信息
  5. 地理位置数据

    • MongoDB有强大的地理空间索引
    • 附近的人/地点搜索
    • 路径规划

不适合的场景

  1. 需要复杂事务(虽然有支持,但不是强项)
  2. 严格的关系型数据(多表复杂JOIN)
  3. 高度结构化的财务报表
  4. 数据一致性要求极高的银行核心系统

4/典型应用案例

  • 腾讯游戏:存储玩家数据、游戏日志
  • 阿里云:部分监控数据存储
  • eBay:商品分类、元数据管理
  • Forbes:内容管理系统

5/总结对比

特性MongoDB传统SQL数据库
数据模型文档型,灵活表结构,固定
扩展方式水平扩展(分片)垂直扩展为主
事务支持4.0+版本支持多文档事务强事务支持
查询语言MQL(基于JSON)SQL
适用场景快速变化的数据、大数据结构化数据、强一致性

简单判断原则:如果你的数据像“文档”而不是“表格”,需要快速迭代,或者数据量增长很快,MongoDB是很好的选择。如果是复杂的财务系统或需要大量关联查询的传统业务,关系型数据库可能更合适。