DynamoDB 項目大小上限(400 KB)
一個 DynamoDB item 最多只能容納 400 KB 的資料。從 MongoDB(16 MB 文件)或一個沒有實務上限的關聯式列轉過來,那個天花板感覺很低 — 而你往往是以慘痛方式發現它的:一筆運作了好幾個月的寫入,因為某個 item 終於長得太大,突然以 ValidationException 失敗。
這個上限不是隨意的,也不是你能調高的配額。它是一個建模約束,而撞到它的那些 item,通常是在告訴你資料建模錯了。
DynamoDB 的項目大小上限是多少?
DynamoDB 把單一項目限制在 400 KB — 這是一個你無法調高的硬上限。這個大小會把屬性名稱與值合在一起計算,包含每一個巢狀的串列、map 與集合元素。項目通常是因為無上界的成長而撞到它,例如一個不斷膨脹的嵌入串列;解法是建模,把那個集合拆成各自獨立的項目,而不是壓縮。
- 每個 item 400 KB,硬上限。 不可調整,不是軟性配額。
- 大小=屬性名稱+值,合在一起。 長的屬性名稱會算進去,每個 item 都算。
- 巢狀與集合也算。 串列、map,以及它們的巢狀值全都會累加。
- 常見原因是無上界的成長 — 在一個父項目上嵌入一個會無限制成長的串列。
- 解法是建模,不是壓縮。 把那個正在成長的集合拆成它自己的、共用一個 partition key 的項目。
問題:那個永遠長大的項目
假設你追蹤一隊車輛,而你決定把每輛車的遙測讀數存成車輛項目上的一個串列:
PK: VEHICLE#A1 readings: [ {ts, lat, lng, fuel}, {ts, lat, lng, fuel}, ... ]頭一兩天還好。但讀數每幾秒就進來、從不停止,所以這個串列無上界地成長。最終單一車輛項目越過 400 KB,於是對它的每一筆寫入都失敗 — 你再也無法為那輛車記錄任何遙測,因為每次更新都會重寫整個(如今超大的)項目。
bug 不是那個大小上限。是把一個無上界的一對多關係建模成一個嵌入串列。那只有在「多」這一側有上界且很小時才行得通。
真正算進 400 KB 的是什麼
DynamoDB 把項目的總大小量測為以下各項之和:
- 每個屬性名稱,以 UTF-8 編碼。一個 20 字元的名稱跨數百萬個 item 重複,就既是大小、也是你要付費的儲存量 — 這正是資深建模者把屬性名稱保持簡短的原因。
- 每個屬性值。 字串與二進位以其位元組長度計;數字以一種精簡編碼計;布林與 null 以一個極小的固定成本計。
- 巢狀結構。 一個串列或 map 會把自身的開銷加上它裡頭每個元素與鍵的大小一併算進去,一路到底。
沒有需要另外規劃的單一屬性上限 — 是整個 item 對著那條 400 KB 的線。AWS 服務配額把確切的位元組計算說得很清楚。
為什麼存在這個上限
大的 item 搬移起來很昂貴。DynamoDB 的讀取以 4 KB 為單位計量,所以一個 400 KB 的 item 強一致讀取要花 100 RCU — 而隨著 item 變大,讀取、寫入與複製全都變慢、變貴。這個上限把你推向小而精準的 item,遠離 NoSQL 新手出於關聯式習慣會去抓的那種「撈一個巨大 blob」的反模式。
繞過它的建模
對車隊這個例子,別再嵌入。給每筆讀數自己的 item,放在與車輛相同的 partition 裡,依 sort key 上的時間戳排序:
PK: VEHICLE#A1 SK: READING#2026-06-27T10:00:05Z lat, lng, fuel
PK: VEHICLE#A1 SK: READING#2026-06-27T10:00:10Z lat, lng, fuel現在沒有單一 item 會成長,寫入永遠不會撐破上限,而對 VEHICLE#A1 的單一 Query 仍能把一輛車的讀數當作一個排序好的項目集合拉回來。有上界的子串列(少數幾個標籤、一個固定的設定區塊)嵌入沒問題;無上界的就要變成 item。
在 DynoTable 中檢查項目大小
在你定下一個形狀之前,先掂量一個具代表性的項目。在 DynoTable 中,用 Quick View 開啟一個項目, 它會在屬性旁邊顯示該項目的位元組大小 — 這樣你就能在瀏覽真實資料時,於設計階段抓到過重的形狀, 而不是在寫入失敗時。
偏好留在瀏覽器中?DynamoDB 項目大小計算機 從貼上的範例完成同樣的事,回報確切的 KB 以及每次讀寫將花費的 RCU/WCU。

陷阱與下一步
- 盯緊那些隨流量成長的嵌入串列 — 它們是經典的 400 KB 定時炸彈。給它們設上界,或把它們拆出去。
- 縮短屬性名稱,在高基數的 item 上 — 那是白白拿回來的大小與儲存量。
- 大的值該放進 S3。 把大的 blob(圖片、文件)存進 S3,在 item 上只保留那個 key。
- 相關:反正規化與一對多關係涵蓋何時該嵌入、何時該拆分。
想一眼看到一張表裡真實的項目大小嗎?下載 DynoTable,直接檢視你的資料。


