0%

MongoDB简介

MongoDB 简介:面向文档的分布式数据库

MongoDB 是一款高性能、开源、面向文档的 NoSQL 数据库,由 C++ 编写,专为处理海量非结构化或半结构化数据设计。它打破了传统关系型数据库的表结构限制,采用灵活的文档模型,非常适合 Web 应用、大数据存储和快速迭代的业务场景。

核心特性

面向文档的存储模型

  • 文档(Document):MongoDB 的基本数据单元,类似 JSON 格式的BSON(Binary JSON),支持嵌套结构、数组等复杂数据类型。

    示例文档:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    {
    "_id": ObjectId("507f1f77bcf86cd799439011"), // 自动生成的唯一标识
    "name": "MongoDB",
    "type": "database",
    "features": ["high performance", "high availability", "easy scalability"],
    "version": "6.0",
    "metrics": {
    "downloads": 1000000,
    "users": 500000
    }
    }
  • 集合(Collection):多个文档的集合,类似关系型数据库的 “表”,但无需预先定义结构(模式自由),同一集合中的文档可以有不同的字段。

模式自由(Schema-less)

  • 无需预先定义表结构(Schema),文档的字段可以动态添加或修改,适应业务快速迭代。

  • 例如,同一users集合中可以同时存在以下文档:

1
2
3
4
// 文档1
{ "name": "Alice", "age": 25, "email": "alice@example.com" }
// 文档2(字段不同)
{ "name": "Bob", "phone": "123456789", "address": { "city": "Beijing" } }

高性能

  • 内存映射(MMAP):通过内存映射文件(MMAP)技术将数据文件直接映射到进程内存,读写操作通过内存完成,减少传统 I/O 开销。
  • 索引支持:支持单字段索引、复合索引、地理空间索引等,加速查询(类似关系型数据库的索引)。
  • 读写分离:支持副本集(Replica Set),主节点处理写操作,从节点分担读压力,提高吞吐量。

高可用性与扩展性

  • 副本集(Replica Set):由多个节点组成的集群,自动实现故障转移(主节点故障时,从节点自动选举新主节点),确保数据不丢失。
  • 分片(Sharding):将海量数据分散存储到多个分片服务器,支持水平扩展,应对数据量增长。

丰富的查询与聚合能力

  • 支持类似 SQL 的查询语法,包括过滤、排序、分页、嵌套查询等。

  • 提供强大的聚合框架(Aggregation Pipeline),支持数据分组、统计、转换等复杂操作。

  • 示例查询:

    1
    2
    // 查询 age > 18 且 country = "China" 的用户,按 name 升序排序
    db.users.find({ age: { $gt: 18 }, country: "China" }).sort({ name: 1 })

多语言支持

  • 提供官方驱动支持几乎所有主流编程语言,如 Java、Python、Node.js、C#、PHP 等,易于集成到各类应用中。

适用场景

MongoDB 适合处理以下类型的业务需求:

  • 非结构化 / 半结构化数据:如日志、用户行为、社交数据(JSON 格式天然适配)。
  • 快速迭代的业务:无需频繁修改表结构,适应敏捷开发。
  • 高并发读写:通过副本集和分片支持高吞吐量。
  • 大数据存储:分片机制支持 PB 级数据存储。

典型应用案例

  • 电商平台的商品信息(字段多变)。
  • 社交应用的用户动态、消息记录。
  • 物联网设备的传感器数据(海量、非结构化)。

与关系型数据库的核心区别

特性 MongoDB(NoSQL) 关系型数据库(如 MySQL)
数据模型 文档(BSON),嵌套结构 表(行 / 列),严格 Schema
扩展性 水平扩展(分片)为主 垂直扩展(升级硬件)为主
事务支持 支持多文档事务(4.0+) 强事务支持(ACID)
join 操作 不支持(通过应用层实现关联) 原生支持多表 join
适用场景 非结构化数据、高并发、快速迭代 结构化数据、强事务需求

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10