DynamoDB 的最大项目大小是多少?

400 KB。DynamoDB 的最大项目大小是 400 KB。这个总量同时计入属性名(UTF-8 字节长度)和所有属性值(二进制长度),包括嵌套的列表和映射。二进制值按原始字节长度计量。没有办法提高这个上限——更大的对象该放进 Amazon S3。

什么会计入这 400 KB

项目大小是以下各项之和:

  • 每一个属性名,按 UTF-8 字节计量,以及
  • 每一个属性值,按二进制长度计量(字符串按 UTF-8、数字用紧凑表示、二进制按原始字节)。

嵌套的映射和列表结构还会带来一点点按元素计的开销。长属性名要占真实空间——把它们缩短就能省出地方。

400 KB 是 409,600 字节,而且名字也算在里面

AWS 用二进制单位计量:「DynamoDB denotes 1 KB = 1024 bytes.」所以上限是 409,600 字节,不是 400,000。你可以用一个字符串属性对 PutItem 做二分搜索,找到确切的边界:

await client.send(
  new PutItemCommand({
    TableName: 'sizes',
    Item: {pk: {S: 'A'}, a: {S: 'x'.repeat(n)}}
  })
);

能成功的最大 n409,596。加上键名(pk,2 字节)、键值(A,1 字节)和属性名(a,1 字节),你正好落在 409,600 上。再多一个字节,你会得到:

ValidationException: Item size has exceeded the maximum allowed size
HTTP 400

现在把那个属性从 a 改名为 attributeName,别的什么都不动。能塞下的最大值降到 409,584,正好少了 12 字节,而 12 字节正是这个名字多出来的长度。

AWS 自己的建议就是从这个算术里来的。「We recommend that you choose shorter attribute names rather than long ones.」

这也是为什么在一个属性很多的项目上,400 KB 的预算比看上去更紧。每一个名字,在这个项目的整个生命周期里,每次写入都要付一遍,每次读取也要付一遍。

它为什么重要

项目大小驱动容量成本:每次读取按 4 KB 一档计费,每次写入按 1 KB 一档计费(参见容量单元)。更大的项目不仅有触碰硬上限的风险,每次操作也更贵。

撞上它的时候

把数据拆到多个项目里,或者把大块二进制内容挪到 Amazon S3 并在 DynamoDB 里存一个引用。

深入了解

项目大小计算器测量任意项目,并阅读项目大小上限指南。下载 DynoTable 在编辑时就能看到项目大小。

参考资料

最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。400 KB 这个约束于 2026-07-28 重新核对:它现在在 Constraints.html 上,而不在配额页面上。

2026-07-28 针对 DynamoDB Local 3.3.0,用 Node v24.18.0 上的 @aws-sdk/client-dynamodb 3.1095.0 实测。字节数字来自对 PutItem 的二分搜索;ValidationException 是引擎原样输出。

无需控制台即可使用 DynamoDB

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

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