MongoDB是一个开源、高性能、无模式的文档数据库,是 NoSQL 数据库产品的一种。
介绍
MongoDB是一种面向文档的数据库管理系统,用C++等语言撰写而成,以解决应用程序开发社区中的大量现实问题。
它在现代 Web 和移动应用程序中被广泛使用,主要特点和优势如下:
主要特点
- 文档模型 (Document Model):
- MongoDB 中的记录是一个文档(Document),它以类似于 JSON 的 **BSON(Binary JSON)**格式存储。
- 文档由字段和值对组成,字段的值可以包含其他文档、数组等,非常灵活。
- 灵活的模式 (Schema-less):
- 与传统的关系型数据库需要事先定义严格的表结构不同,MongoDB 采用动态模式。同一集合(Collection,类似于关系型数据库中的
表)中的文档结构可以不同,这极大地便利了快速迭代开发和处理非结构化、半结构化数据。
- 高性能:
- MongoDB 支持丰富的索引类型(包括地理空间、文本搜索等),能保证查询速度。
- 其文档模型支持嵌入式数据,可以减少耗时的连接(Join)操作,优化读写性能。
- 易于扩展 (Scalability):
- MongoDB 是一个分布式数据库,天生支持水平扩展。它通过**分片(Sharding)**技术,可以将数据分布在多台机器集群上,以应对大数据量和高并发的应用场景。
- 高可用性 (High Availability):
- 通过**副本集(Replica Sets)**机制,MongoDB 可以提供数据的冗余和自动故障转移能力,确保数据可用性。
核心概念对比(与传统关系型数据库)
| MongoDB 概念 |
关系型数据库 (如 MySQL) 概念 |
解释 |
| Document (文档) |
Row (行/记录) |
MongoDB 中的基本数据单元,类似 JSON 对象。 |
| Collection (集合) |
Table (表) |
存储文档的组,类似于表。 |
| Database (数据库) |
Database (数据库) |
包含一个或多个集合的容器。 |
产品和服务
- MongoDB Atlas: MongoDB 提供的数据库即服务 (DBaaS) 云产品,用于在云端部署和管理 MongoDB。
- MongoDB Community: 开源的、可免费使用的版本,适合小型或中型项目。
- MongoDB Enterprise: 基于订阅的企业版本,提供全面的支持和企业级安全功能。
适用场景
MongoDB 适用于需要快速开发和灵活数据模型的应用,常见的应用场景包括:
- 内容管理系统 (CMS)
- 电商平台 (处理大量的商品信息、订单数据)
- 物联网 (IoT) 应用 (存储和分析海量传感器数据)
- 游戏平台 (存储玩家信息和进度)
- 社交媒体
- 需要快速存取和高扩展性的 Web/移动应用
部署
区域分片集群(Zone Sharding / Tag-Aware Sharding)
这是 MongoDB 实现多活(Active-Active)写扩展的官方推荐方案,适用于数据有明确地域属性的场景(如华北用户写华北,华南用户写华南)。
- 架构:
- 部署一个分片集群(Sharded Cluster)。
- Shard A(及副本集)部署在区域 A。
- Shard B(及副本集)部署在区域 B。
- 数据同步机制:
- 利用 Zone(标签) 功能,将特定的分片键范围(如
UserLocation: "North")绑定到特定的 Shard 上。
- MongoDB 内部的 Balancer 会自动将数据迁移并锁定在指定区域的物理分片上。
- 效果:
- 本地写:区域 A 的用户写入 Shard A(本地主节点),无需跨域。
- 本地读:同理。
- 全局数据可见:虽然数据物理隔离,但逻辑上仍是一个大集群,任何节点的应用都可以查询到所有数据(跨分片查询)。
双向同步 / 第三方工具方案(非原生)
如果业务要求同一条数据可以在两个区域同时被修改(即双主/多主模型),MongoDB 原生并不支持(因为会产生冲突)。但可以通过以下方式变通: