DynamoDB 是 NoSQL 数据库吗?

是。DynamoDB 是一个 NoSQL 数据库——一个非关系型、全托管的键值与文档存储。它存放的是无模式的项目,而不是固定模式表里的行,并且用 SQL 连接和即席查询换来了可预测的个位数毫秒级性能,以及横向扩展到几乎任意规模的能力。

是哪一种 NoSQL

DynamoDB 同时支持键值和文档两种数据模型。每个项目都由一个主键寻址,而属性可以以映射和列表的形式嵌套最多 32 层——这就是模型的文档那一面。

它和 SQL 有什么不同

  • 没有固定模式——只有主键需要事先定义;其他属性可以逐项目而异。
  • 没有连接——你改用反规范化,并围绕访问模式来建模。
  • 可预测的性能——读取直接命中一个分区键,所以延迟不会随数据增长而变化。

引擎拿到一条 JOIN 会怎么做

PartiQL 让 DynamoDB 看起来像 SQL,所以这条边界很容易被忽略。AWS 文档化的 SELECT 语法就是全部的语法,而它没有 JOIN 子句:

SELECT {{expression}}  [, ...]
FROM {{table}}[.{{index}}]
[ WHERE {{condition}} ] [ [ORDER BY {{key}} [DESC|ASC] , ...]

硬发一条过去,解析器会在第二张表那里停下:

await client.send(
  new ExecuteStatementCommand({
    Statement: `SELECT o.pk FROM "orders" o JOIN "customers" c ON o.pk = c.pk`
  })
);

真实输出:

ValidationException: Only select from a single table or index is supported.
HTTP 400

这个拒绝发生在解析阶段,任何数据被读取之前,所以再怎么设计索引也换不来一次连接。在 NoSQL 存储里,连接是你应用的活儿。

这也划定了任何客户端能诚实提供什么的边界。DynoTable 的 SQL Workbench 接受 INNER JOINLEFT JOINGROUP BY 以及 COUNT/SUM/AVG/MIN/MAX

它会把这些编译成原生的 QueryScan 调用,然后在你的机器上完成连接与聚合。DynamoDB 自始至终看到的仍然只有单表读取。

什么时候合适

DynamoDB 是为 OLTP 工作负载打造的:高吞吐、已知的点读与范围读写。重分析该放在一个由导出喂数据的独立列式存储里。

深入了解

参见什么时候该用 DynamoDB,以及如何在如何在 DynamoDB 中建模数据里塑造数据。下载 DynoTable,浏览你的 NoSQL 表,并在 DynamoDB 的访问模式规则之内对它们运行 SQL。

这些限制很重要,因为您无法在查询时加入摆脱这些限制。您预先围绕它们进行建模 - 稀疏索引、非规范化属性和单表键 - 然后按分区读取。 Query Builder 将过滤器转换为 QueryScan 请求 DynamoDB 将实际执行。

在DynoTable中:当关系问题合法时,SQLWorkbench将JOINGROUP BY编译为机器上的本机QueryScan调用 - DynamoDB仍然会看到单表读取。有关支持的语法和诚实限制,请参阅SQL Workbench

深入了解

最后核实于 2026-07-13,依据上方链接的 AWS 官方文档;PartiQL 的 SELECT 语法已于 2026-07-28 重新核对。

2026-07-28 针对 DynamoDB Local 3.3.0,经由 @aws-sdk/client-dynamodb 3.1095.0、Node v24.18.0 复现。上方的 ValidationException 是原样的引擎输出。

深入了解

根据上面链接的官方 AWS 文档最后一次验证时间为 2026 年 7 月 13 日; PartiQLSELECT语法已重新检查2026-07-28.

于 2026 年 7 月 28 日在 Node v24.18.0 上通过 @aws-sdk/client-dynamodb 3.1095.0 针对 DynamoDB Local 3.3.0 进行复制。上面的ValidationException是逐字引擎输出。

无需控制台即可使用 DynamoDB

一款快速的 DynamoDB 桌面客户端,可运行 DynamoDB 无法执行的真正 SQL——JOINs、GROUP BY、聚合——并支持可视化编辑和运行在你自己的 Bedrock 密钥上的 AI agent。

30 天免费试用,无需信用卡 — 之后为无时间限制的免费版。