😊

DynamoDBの仕組みについて簡単な理解

に公開

はじめに

インフラチームとして、アプリチームが求めるDynamoDBを作ることになりました。

何となく、資格試験の経験から「DynamoDBってキーバリューストアだった気がするなあ。」「RDBより早く、簡単にデータが取り出せるんだったよな。」「サーバレスのDBとして使うならDynamoDB使うんだよな。」などの知識はありましたが、作るときにアプリチームにどんなことを聞けば作れるのか、それぞれのパラメータはどのような意味があるのか。などを知ることができたので、まとめておきます。

DynamoDBとは

DynamoDBはサーバーレスのフルマネージド分散 NoSQL データベースで、あらゆる規模で 1 桁ミリ秒のパフォーマンスを実現します。

つまり、メンテが不要で、可用性高くて、めっちゃはやいJSONみたいなデータベースのこと。

{
	user_id: 1111111,
	name: "Jon Snow",
	email: "jon.snow@example.com",
	age: 28,
	created_at: "2026-01-22T14:30:00Z",
	status: "active",
	role: "admin",
	preferences: {
		theme: "dark",
		language: "ja",
		notifications: true
	},
	tags: ["premium", "verified"]
}

RDSとの違い:アプリと連携して作成が必要

RDSの場合

インフラ観点で話すと、RDSの構築の時は、テーブル情報は基本的に不要です。

なぜなら、アプリチームには、テーブルが乗っかるホスト=RDSを作って渡してあげるだけで良いからです。アプリチームが勝手にDBにログインして、テーブルを作ります。

これが、インフラとアプリで担当をすみわけている現場の通例かなと思います。

DynamoDBの場合

ただし、DynamoDB を作る時は、DBの情報の一部を指定して作る必要があります。

DBの中身はアプリチームが決めるので、アプリに聞く必要があるということです。

DynamoDBを作るときに必要な情報

DynamoDBを作る時に必要な情報は以下の通りです:

必須項目

  • パーティションキー(必須): 構築時にのみ指定可能

任意項目

  • ソートキー(任意): 構築時にのみ指定可能
  • TTLに利用する属性(キー)情報: アプリチームに渡すときにTTLの属性を設定した状態で渡せるので、聞いておいた方が良い

<aside>
💡

アプリチームに確認すべき項目

  1. パーティションキー名(必須)
  2. ソートキー名(必要であれば)
  3. TTL用の属性名(TTLを使う場合)
    </aside>

パーティションキーとソートキーの役割

パーティションキーのみの場合

項目 説明
一意性 パーティションキーが主キーになるため、完全に一意である必要がある
重複 ❌NG(同じパーティションキーで登録すると上書きされる)
使用例 user_id のように、必ず一意になる値

パーティションキー + ソートキーの場合

項目 説明
一意性 パーティションキー + ソートキーの組み合わせで一意
重複 ✅OK(同じパーティションキーでも、ソートキーが違えば別レコード)
使用例 パーティションキー: user_id、ソートキー: timestamp
メリット 範囲検索が高速、関連データを近くに配置できる

具体例:ソートキーあり

// 同じuser_idでも、timestampが違えば共存できる
{ user_id: 1111111, timestamp: "2026-01-25T10:00:00Z", action: "login" }
{ user_id: 1111111, timestamp: "2026-01-25T11:00:00Z", action: "logout" }
{ user_id: 1111111, timestamp: "2026-01-25T14:00:00Z", action: "login" }

DynamoDBに入るデータは柔軟

DynamoDBに入ってくるデータは、{} に囲まれたキーとバリューです。

このデータには、必ずパーティションキーは含まれる必要があります。ソートキーを指定している場合は、ソートキーも入っている必要があります。

ですが、それ以外のキーとバリューは気にする必要がありません。

インフラ担当者が気にしなくて良いこと

  • パーティションキーとソートキー以外の属性
  • 属性の増減(後からキーとバリューが増えても問題なし)
  • データの中身の詳細
{
	user_id: 1111111,           // ← パーティションキーなので必須
	name: "Jon Snow",            // ← ソートキーの場合は必須
	email: "jon.snow@example.com",  // ↓ 以下は自由に増減OK
	age: 28,
	created_at: "2026-01-22T14:30:00Z",
	status: "active",
	role: "admin",
	preferences: {
		theme: "dark",
		language: "ja",
		notifications: true
	},
	tags: ["premium", "verified"]
}

<aside>
🎯

インフラ担当者の仕事

パーティションキーとソートキーを指定した「箱」を作ってアプリチームに渡すこと。その箱に、どんなデータが入ってくるかは気にしなくてOK!

</aside>

まとめ

DynamoDBはサーバーレスで超高速なNoSQLデータベースです。

構築時に必要な情報:

  1. パーティションキー(必須)
  2. ソートキー(任意)
  3. TTL用の属性名(TTLを使う場合)

この3つをアプリチームに聞いて設定すれば、あとは柔軟にデータを入れられる箱の完成です!

インフラ担当者へのポイント:

  • RDSと違い、構築時にキー情報が必要
  • パーティションキーとソートキー以外の属性は気にしなくてOK
  • アプリチームに「パーティションキーだけで一意になるか?」を確認すると安心

Discussion