DynamoDB vs Azure Cosmos DB
DynamoDB 和 Azure Cosmos DB 分别是 AWS 与 Azure 的旗舰级托管 NoSQL 数据库。两者都是全托管、可运行为无服务器、按键分区数据并水平扩展。实际中最大的差异在于云生态对齐、Cosmos DB 的多模型 API 与五种可调一致性级别,以及各自对吞吐量的计费方式。
你该用 DynamoDB 还是 Cosmos DB?
如果你在 AWS 上,想要一个按请求付费、深度集成 AWS 的无服务器键值与文档存储,就选 DynamoDB。如果你在 Azure 上,想要多模型 API(文档、Cassandra、Gremlin 图、Table)、五种明确的一致性级别,或者开箱即用的多区域写入,就选 Azure Cosmos DB。通常在功能之前,云生态对齐就已经决定了选择。
DynamoDB vs Cosmos DB 速览
| 特性 | DynamoDB | Azure Cosmos DB |
|---|---|---|
| 数据模型 | NoSQL 键值与文档;表中项目最大 400 KB | 多模型;面向 NoSQL 的原生 API 存储 JSON 文档,另有对 MongoDB、Cassandra、Gremlin(图)和 Table 的线路兼容 API |
| 查询语言 / API | 原生 API(GetItem、Query、Scan)以及 PartiQL——一种 SQL 兼容语言 | NoSQL API 中面向 JSON 的类 SQL 查询语言,外加各兼容 API 各自的查询语言 |
| 分区 / 键 | 分区键加上可选的排序键,构成复合主键 | 每个容器一个分区键;项目归入逻辑分区 |
| 一致性 | 默认最终一致性;可按请求选择强一致性读取 | 五种级别——强一致、有界过期、会话、一致前缀、最终——在账户或请求级别选择 |
| 多区域写入 | Global Tables 提供多区域、双活复制 | 开箱即用的全球分布;可启用多区域写入(此时无法使用强一致性级别) |
| 扩展模型 | 自动分区;无服务器按需容量或预置容量 | 预置吞吐量(RU/s)、自动缩放或无服务器;容量以 Request Units 计量 |
| 事务 | 区域内跨多个项目的 ACID 事务 | 逻辑分区内的 ACID 事务(如事务批处理 / 存储过程) |
| 定价模型 | 按请求付费(按需)或预置 RCU/WCU,加存储;仅限 AWS | 每秒 Request Units(预置、自动缩放或无服务器)加存储,按每个已启用区域计费 |
| 最佳适配场景 | 基于 AWS、键访问可预测、想要零运维无服务器 NoSQL 的应用 | 基于 Azure、想要多模型 API、明确一致性调优或全球多写分布的应用 |
何时 DynamoDB 更合适
- 你在 AWS 上。 DynamoDB 与 IAM、Lambda、Streams 及更广的 AWS 生态原生集成,省去你原本要写的胶水代码。
- 你想要简单的按请求付费定价。 按需容量按读写计费,无需预置吞吐量,也没有空闲成本。
- 你的访问模式已知且基于键。 当你围绕查询设计键时,DynamoDB 的分区/排序键模型带来稳定的低延迟——参见单表设计。
- 你想要 AWS 上的双活多区域复制。 Global Tables 通过配置即可提供。
何时 Cosmos DB 更合适
- 你在 Azure 上。 Cosmos DB 与 Azure 身份、Functions 及周边平台的集成,就像 DynamoDB 之于 AWS。
- 你需要多模型 API。 一个服务暴露文档、Cassandra、Gremlin 图和 Table API,能简化从这些生态的迁移。
- 你想要明确、可调的一致性。 Cosmos DB 在强一致与最终之间提供五个命名的一致性级别——包括有界过期和会话——可按账户或请求选择。
- 你需要开箱即用的多区域写入。 Cosmos DB 可通过开箱即用的全球分布在多个区域接受写入(代价是无法使用最强一致性级别)。
使用 DynamoDB
如果你最终选择 DynamoDB,DynoTable 是一款面向它的原生桌面客户端,支持 macOS、Windows 和 Linux。它读取你标准的 AWS 凭证链,因此你的数据留在 DynamoDB 中,无需迁移。除了浏览和内联编辑项目之外,它的 SQL Workbench 通过将关系式查询——连接、GROUP BY、聚合——编译为 Query/Scan,在 DynamoDB 的访问模式规则内表达它们;其 AI 助手运行在你自己的 AWS Bedrock 凭证上。
免费的 DynamoDB Expression Builder 生成键条件、过滤和更新表达式,正确处理保留字和属性名,并输出 SDK、CLI 和 PartiQL 形式。DynoTable 是一款闭源商业应用;本页描述它做什么,而非它如何构建。
常见问题
Cosmos DB 和 DynamoDB 是一回事吗?
不是。它们是微软和 AWS 各自的独立产品。两者都是托管、可无服务器运行、按键分区的 NoSQL 数据库,但 Cosmos DB 是多模型的,带有多个线路兼容 API 和五种一致性级别,而 DynamoDB 是 AWS 原生的键值与文档存储,采用两级(最终或强)读取模型和 PartiQL。
DynamoDB 有像 Cosmos DB 那样的一致性级别吗?
DynamoDB 提供两种读取模式,而非五种命名级别:最终一致性读取(默认)和在区域内按请求选择的强一致性读取。Cosmos DB 暴露一个谱系——强一致、有界过期、会话、一致前缀和最终——在账户或请求级别配置。
我能从 Cosmos DB 迁移到 DynamoDB 吗?
可以,但要按重新建模而非直接搬迁来规划。两者都是按键分区的 NoSQL,因此概念可以迁移,但你需要重新映射分区/排序键,把查询改写为 DynamoDB 的 API 或 PartiQL;任何 Cosmos DB 的 Gremlin 或 Cassandra API 用法在 DynamoDB 上都需要不同的数据模型。从你的访问模式入手——参见如何在 DynamoDB 中建模数据。
相关内容
- 了解 DynamoDB 一致性和多区域 Global Tables。
- 用单表设计和如何在 DynamoDB 中建模数据来建模访问模式。
- 用免费的 DynamoDB Expression Builder 构建表达式。
- 下载 DynoTable 来操作你的 DynamoDB 表。
Last verified 2026-07-12 against the official AWS DynamoDB Developer Guide and Microsoft Azure Cosmos DB documentation. Azure Cosmos DB 是 Microsoft 的商标;此处引用仅用于标识。