初級読了 1 分

DynamoDB のデータ型

すべての DynamoDB の属性には、ワイヤー形式で1文字または2文字の型コードのタグが 付きます。この一覧を知ることが重要なのは、型が値の保存方法と、その値がアイテムの サイズにどう寄与するかの両方を決めるからです。

ひと目で

コードカテゴリJSON / JS 相当例(DynamoDB-JSON)
S文字列スカラーstring{"S": "Ada"}
N数値スカラーnumber{"N": "37"}
BバイナリスカラーUint8Array / base64{"B": "ZGF0YQ=="}
BOOLブール値スカラーboolean{"BOOL": true}
NULLNullスカラーnull{"NULL": true}
Mマップドキュメントobject{"M": {"k": {"S": "v"}}}
Lリストドキュメントarray{"L": [{"N": "1"}]}
SS文字列セットセット—(JSON 型なし){"SS": ["a", "b"]}
NS数値セットセット{"NS": ["1", "2"]}
BSバイナリセットセット{"BS": ["ZA=="]}

スカラー

  • S — 文字列(UTF-8。文字数ではなく バイト 長でサイズ計算されます)。
  • N — 数値。精度のため文字列として送られ、最大38桁です。
  • B — バイナリ。base64 エンコードされて送られます。
  • BOOLtrue / false
  • NULL — 明示的な null マーカー。

ドキュメント

  • M — マップ(オブジェクト)。ネストされた属性はそれぞれ独自の型タグを保持します。
  • L — リスト。要素は型が混在しても構いません。
{"profile": {"M": {"name": {"S": "Ada"}, "age": {"N": "37"}}}}

セット

  • SS — 文字列セット、NS — 数値セット、BS — バイナリセット。

セットは順序を持たず、同種で、空にはできません。重要なのは、プレーンな JSON には セット型がない ことです — 配列はリスト (L) としてラウンドトリップし、決して SS/NS にはなりません。これはバグではなく実際の変換上の制約です。 DynamoDB-JSON コンバーター の注記を参照してください。

どの型をキーにできるか

パーティションキーとソートキーは — テーブルでも任意のインデックスでも — スカラー でなければならず、SNB のいずれかだけです。ブール値、セット、マップ、リスト をキーにすることはできません。複数の値を1つの S に連結して「複合」キーをモデル化 してください(例: ORDER#2026#42)。

知っておくと役立つ制限

  • アイテムは 400 KB が上限です — すべての属性名と値、ネストされたものも含みます。
  • 数値は最大 38桁 の精度を持ちます(正でも負でも)。
  • マップとリストは最大 32レベル までネストできます。
  • セットは空にできず同種です — 空のセットも、SN の混在もできません。

なぜ型がコストに影響するか

アイテムサイズは属性名のバイト数と値のバイト数の合計で、各型はサイズ計算が 異なります — 数値は圧縮され、ブール値と null は1バイト、マップとリストは要素ごとの オーバーヘッドを加えます。そのサイズは読み取り/書き込みの キャパシティユニット に切り上げられます。実際のアイテムを アイテムサイズ計算ツール で測ってください。

DynoTable を試す と、アイテムを編集しながらすべての属性の型と リアルタイムのバイト数を確認でき、各型タグを読み取る SQL Workbench で型付き属性を 横断してフィルタや集計ができます。

更新日