DynamoDB vs MongoDB
你该用 DynamoDB 还是 MongoDB?
如果你需要一个在 AWS 上、全托管、无服务器的键值和文档存储,具有可预测的基于键的访问模式和省心的扩展,就选 DynamoDB。如果你需要一个文档数据库,支持灵活的即席查询、丰富的聚合管道,并可选择自托管或在任意主流云上以托管方式运行,就选 MongoDB。你的访问模式决定了答案。
DynamoDB vs MongoDB 速览
| 特性 | DynamoDB | MongoDB |
|---|---|---|
| 数据模型 | NoSQL 键值与文档;项目分组在表中,每个项目最大 400 KB | 文档数据库;BSON(类 JSON)文档最大 16 MB,分组在集合中 |
| 查询语言 / API | 原生 API(GetItem、Query、Scan、PutItem……)外加 PartiQL,一种兼容 SQL 的查询语言 | MongoDB Query API (MQL) 外加用于多阶段转换、连接($lookup)和分组的聚合管道 |
| 主要访问模式 | 基于分区键(及可选排序键)的键式查找;模式围绕已知访问模式提前设计 | 对任意字段的灵活查询;由索引支撑的即席过滤和聚合 |
| 二级索引 | 全局二级索引(自有吞吐量,任意键)和本地二级索引(同一分区键,单分区上限 10 GB) | 对任意字段的二级索引,包括复合、多键、文本、地理空间和通配符索引 |
| 一致性模型 | 默认最终一致性读取;可按请求使用强一致性读取(在单个 AWS 区域内) | 可调的读/写关注级别;默认从主节点读取为强一致性 |
| 扩展模型 | 由 AWS 管理的自动分区;无需预置服务器即可扩展吞吐量和存储 | 通过在集群中分片实现横向扩展;副本集提供高可用和故障转移 |
| 事务 | 跨多个项目的 ACID 事务,作用范围限于单个 AWS 区域 | 多文档 ACID 事务(自 4.0 起),包括跨分片(自 4.2 起) |
| 定价模型 | 按请求付费(按需)或预置容量,外加存储;无需运行服务器 | Atlas 基于集群(实例规格/时长),带有低成本的 Flex 层;自托管的社区版仅需承担基础设施成本 |
| 托管 / 无服务器选项 | 完全无服务器且全托管;仅在 AWS 上提供 | Atlas 托管服务可在 AWS、Google Cloud 或 Azure 上运行;也可自托管。Atlas Serverless 实例已退役,由 Flex 层取代 |
| 最佳适用工作负载 | 具有可预测键式访问、需要一致低延迟和最少运维的大规模应用 | 模式不断演进、需要即席查询和丰富聚合,或需要多云 / 本地可移植性的应用 |
什么时候 DynamoDB 是更好的选择
- 你在 AWS 上并希望零数据库运维。 DynamoDB 是无服务器的——没有实例、集群或容量需要打补丁。按需模式会自动随流量扩展(容量模式)。
- 你的访问模式已知且基于键。 当你能围绕数据的读取方式设计键时,DynamoDB 在几乎任意规模下都能提供一致的低延迟查找。这正是单表设计大显身手的地方。
- 你想要按请求付费的定价。 使用按需容量,你只为发生的读写付费,没有空闲集群成本。
- 你需要与 AWS 紧密集成。 与 IAM、Lambda、Streams 及更广泛的 AWS 生态的原生联系可减少胶水代码。
什么时候 MongoDB 是更好的选择
- 你的查询是即席或探索性的。 MongoDB 允许你对任意字段过滤和建索引,并运行丰富的服务端聚合——包括跨集合的连接——而无需预先规划每个访问模式。
- 你需要跨云或本地的可移植性。 MongoDB 可自托管,或在 AWS、Google Cloud 和 Azure 上通过 Atlas 运行。DynamoDB 仅限 AWS。
- 你的文档很大或嵌套很深。 MongoDB 的 16 MB 文档上限远大于 DynamoDB 的 400 KB 项目上限(DynamoDB constraints)。
- 你的模式变化很快。 灵活的文档加上一流的二级索引,适合快速变化的模型,无需僵硬的前期键设计。
使用 DynamoDB
一旦你选定了 DynamoDB,你日常仍然需要一种快速浏览表、运行查询和编辑项目的方式。DynoTable 是一个面向 DynamoDB 的原生桌面 GUI:浏览并内联编辑项目、构建键条件和过滤器,并用 SQL 工作台和 AI 助手查询。如果你带着 MongoDB「什么都能查」的思维方式过来,SQL 工作台能帮你在遵守 DynamoDB 访问模式规则的前提下表达关系型的查询。
要在不离开文档的情况下构建表达式,免费的 DynamoDB Expression Builder 能生成键条件、过滤和更新表达式,并提供可直接粘贴的 SDK、CLI 和 PartiQL 输出。如果你刚接触为键值存储建模,如何在 DynamoDB 中建模数据指南会带你把实体和访问模式转换成键。
FAQ
DynamoDB 比 MongoDB 快吗?
没有哪个是普遍更快的——这取决于工作负载和数据的建模方式。DynamoDB 的设计目标是在大规模下为键式访问提供一致的低延迟性能,而 MongoDB 对于建了索引的查询和即席查询可以非常快。对于真实世界的延迟,合适的数据模型比引擎本身更重要。
DynamoDB 能取代 MongoDB 吗?
有时可以。如果你的访问模式可预测且基于键,DynamoDB 可以取代 MongoDB 并消除大部分运维负担。如果你依赖跨多个字段的即席查询或服务端聚合,那么迁移意味着要先围绕 DynamoDB 的键重新建模你的数据——参见如何在 DynamoDB 中建模数据。
DynamoDB 是基于 MongoDB 的吗?
不是。它们是来自不同公司的、彼此无关的产品。DynamoDB 是 AWS 托管的数据库,其设计渊源可追溯到 Amazon 内部的 Dynamo 工作,而 MongoDB 是一个独立的、源于开源的文档数据库。它们共享「NoSQL」这个标签,但没有共同的代码库。
相关内容
- 了解单表设计和如何在 DynamoDB 中建模数据。
- 用免费的 DynamoDB Expression Builder 构建表达式。
- 下载 DynoTable,用 SQL 工作台和 AI 浏览、查询和编辑 DynamoDB。
Last verified 2026-07-12 against the official AWS DynamoDB Developer Guide and MongoDB documentation. MongoDB 是其各自所有者的商标;此处引用仅用于标识目的。