DynamoDB 的項目大小上限是多少?
400 KB。DynamoDB 的項目大小上限是 400 KB。這個總量同時計入屬性名稱(UTF-8 位元組長度)與所有屬性值(二進位長度),包含巢狀的 list 與 map。二進位值以原始位元組長度計算。這個上限沒有辦法調高 — 更大的物件應該放在 Amazon S3。
什麼會被算進那 400 KB
項目大小是以下各項的總和:
- 每一個屬性名稱,以 UTF-8 位元組計算,以及
- 每一個屬性值,以二進位長度計算(字串以 UTF-8、數字以精簡形式、二進位以原始位元組)。
巢狀的 map 與 list 結構還會加上一點逐元素的額外負擔。過長的屬性名稱會吃掉實實在在的空間 — 把它們縮短就能省出餘裕。
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)}}
})
);能成功的最大 n 是 409,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,在編輯的同時看見項目大小。
參考資料
- Constraints in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB item sizes and formats — Amazon DynamoDB Developer Guide
- Local secondary indexes — Amazon DynamoDB Developer Guide
最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。那個 400 KB 限制已於 2026-07-28 重新查證:它現在落在 Constraints.html,而不是配額頁面。
已於 2026-07-28,在 Node v24.18.0 上透過 @aws-sdk/client-dynamodb 3.1095.0 對照 DynamoDB Local 3.3.0 實測。那些位元組數字來自對 PutItem 的二分搜尋;ValidationException 為引擎的逐字輸出。