Amazon DynamoDB

Amazon DynamoDB の特徴

Amazon DynamoDB を一言でいうと、AWSが提供するフルマネージドのNoSQLデータベースです。もう少し具体的にいうと、大量アクセスに強く、サーバー管理なしで、キーを使って高速にデータを読み書きするためのデータベースです。DynamoDB はフルマネージド、サーバーレス、key-value型の NoSQL データベースで、あらゆる規模で高パフォーマンスなアプリケーションを動かすためのサービスと説明されています。

DynamoDB の特徴

  • NoSQLデータベースです。(SQLクエリはできませんが、PartiQLを利用するとできます。
  • Amazon DynamoDB トランザクションによって DynamoDB に不可分性、一貫性、分離性、耐久性 (ACID) が実現されるため、アプリケーション内でのデータの精度を維持することができます。
  • Amazon DynamoDB グローバルテーブルは、マルチリージョン、マルチアクティブでマスターデータベースをデプロイするための完全マネージド型のソリューションです。
  • DynamoDB グローバルテーブルは、グローバルに展開されたアプリケーションに対して高速の読み取り/書き込み処理を提供して、ユーザーは、非常に高速なアプリケーションパフォーマンスを利用できます。

DynamoDB の基本要素

DynamoDB の基本要素はテーブル、アイテム、属性で、各アイテムはプライマリキーによって一意に識別されます。

DynamoDB は、データを以下のように持ちます。

テーブル
 └─ アイテム
     ├─ 属性
     ├─ 属性
     └─ 属性

RDB と比較すると以下のようになります。

RDB      DynamoDB
テーブル    テーブル
行       アイテム
カラム     属性
主キー     プライマリキー
インデックス  セカンダリインデックス

例えば、ユーザー情報をDynamoDBに入れるとこうなります。これが1つのアイテムになります。

{
  "user_id": "user_001",
  "name": "佐藤太郎",
  "email": "taro@example.com",
  "plan": "premium",
  "created_at": "2026-05-13T10:00:00Z"
}

DynamoDB のメリット

一番の目的は、大量のリクエストを高速・安定・低運用で処理することです。例えば、以下のような用途に向いています。

  • ユーザー設定保存 user_idから設定情報を取得
  • セッション管理 session_idからログイン状態を取得
  • ゲームデータ player_idからスコアや所持アイテムを取得
  • IoTデータ device_id + timestampで時系列データを保存
  • カート情報 user_idから買い物カートを取得
  • APIバックエンド Lambda + API Gateway + DynamoDB
  • イベントログ 特定ユーザー・特定期間のイベント取得

DynamoDBは、

キーが分かっている
↓
そのキーで素早くデータを読む・書く

という処理が得意です。

RDSではなくDynamoDBを選ぶのはどういう時

アクセスパターンが決まっている

例えば、最初から以下のような検索しかない場合です。

user_id でユーザー情報を取得する
session_id でセッション情報を取得する
order_id で注文情報を取得する
user_id ごとの注文履歴を取得する
device_id ごとの最新データを取得する

このように、どのキーで読むかが明確な場合は DynamoDB はパフォーマンスを発揮します。

NoSQL とは

リレーショナルデータベース以外のデータベースを NoSQL というようです。

KVS(Key-Value Store)は NoSQL の中の1つです。

DynamoDBとRDB(リレーショナルデータベース)の違いについて

そもそも DynamoDB と RDB(リレーショナルデータベース)との違いについてですが、DynamoDBは「非リレーショナル」「スキーマレス」であることが言えます。DynamoDB は RDB とは異なり、リレーショナルデータベースではありません。

  • schema(スキーマ) ← 図式、図表、概要という意味。

スキーマの意味が「DBの構造を定義したもの」という意味なら、スキーマレスとは「DBの構造を定義していないもの」ということになります。

  • RDS が得意なこと 複雑な検索、JOIN、集計、トランザクション
  • DynamoDBが得意なこと 高速な単純検索、大量アクセス、スケール、自動運用

リレーショナルデータベース(MySQL、PostgreSQL、Oracle、SQL Server等)の場合

リレーショナルデータベースは、各テーブルを正規化して分割し、共通のキーを元に結合します。

そして欲しいテーブル(表)を作成します。

データは柔軟にクエリできるが、クエリは比較的コストが高くなります。

DynamoDB の場合

外部キーを使って各テーブルを結合して目的のテーブルを作るというような考え方はなく、非正規化によりテーブルを少なく構成し、パフォーマンス向上などを目的にアクセス頻度を減らすように設計します。

データは限られた数の方法で効率的にクエリできるが、その範囲外でのクエリになると高コストで低速になります。

つまり、ここで目的が異なっているということなんですね。

Amazon DynamoDB / NoSQL 設計

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/bp-general-nosql-design.html#bp-general-nosql-design-vs-relational

設計の仕方について

  • RDB ← とりあえず表を作ることができる。後から表を組み合わせて欲しいテーブルを作ることができる。行と列の二次元で構成されるテーブルを CREATE TABLE 文などで作成する。
  • DynamoDB ← クエリ(問い合わせ)が分かるまで設計ができない。とりあえず作ってみても役に立たないもしくは作り直しが発生するリスクがある。細かく全ての項目と型を指定する必要はない。

DynamoDB が保存できるデータ型

  • スカラー型(scalar) ← 1 つの値を表すことができます。数値、文字列、バイナリ、ブール、および null です。
  • ドキュメント型 ← JSON ドキュメントなどの入れ子の属性を持つ複雑な構造を表すことができます。
  • セット型 ← 複数のスカラー値を表すことができます。文字セット、数値セット、およびバイナリセットです。

DynamoDB の使いどころ

■DynamoDB の使いどころ

Amazon DynamoDB

  • トラフィックの多いウェブアプリ
  • eコマースシステム
  • ゲームアプリケーション(ゲームの行動記録)
  • IoTデータの蓄積
  • ビッグデータの解析用のデータ蓄積
  • 高速処理が必要な要件があるもの
  • Webアプリケーションを構築した場合、ユーザーのセッション管理としても利用されることが多いです。

DynamoDB のクロスリージョンレプリケーションについて

  • テーブルへの複数書き込みがフルサポートされ、複数の AWS リージョン間で自動的にレプリケートされるテーブルを作成できます。
  • クロスリージョンレプリケーションを有効にするためには、DynamoDB Streamsを有効化する必要があります。

Dynamo DB が苦手とする処理

  • 複雑なトランザクション処理が発生する業務システムには利用すべきではありません。
  • NoSQLデータベースであるため、JOIN/TRANSACTION/COMMIT/ROLLBACK が必要な複雑な処理には向いていません。

DynamoDB の整合性モデル

  • 「①結果的に整合性のある読み込み【デフォルト】」と「②強い整合性」の2種類があります。
  • DynamoDB は、特に指定がない限り、結果的に整合性のある読み込みを使用します。(デフォルトでは結果整合性モデル
  • 読み込みオペレーションで ConsistentRead パラメータがあり、このパラメータを true に設定すると強い整合性のある読み込みを使用します。

結果的に整合性のある読み込みの特徴

  • 最新の書き込みが反映されない可能性があります。(デメリット)
  • 読み込みスループットが最大限に向上します。(メリット)

強い整合性の特徴

  • 全ての書き込みが反映されているのではデータの更新が反映されています。(メリット)

グローバルテーブルについて

グローバルテーブルを設定すると、リージョンにまたがり(マルチリージョンで)DynamoDB テーブル間のデータを自動的にレプリケートできるようになります。

グローバルテーブルの設定方法

以下の設定で DynamoDB テーブル間のデータ変更を自動的にレプリケートするようになります。

  1. DynamoDB Streamsを有効化します。
  2. 設定したいリージョンにも同じテーブルを作成します。
  3. 設定したい全てのリージョンに作成された DynamoDB テーブルに対してグローバルテーブルを設定します。テーブルの利用を許可する AWS リージョンを指定します。)

グローバルテーブルを作成する前に DynamoDB Streams を有効化する必要があります。

DynamoDB TTL(Time to Live、有効期限)

Amazon DynamoDB 有効期限(TTL)では、項目ごとのタイムスタンプを定義して、項目が不要になる時期を特定できます。指定されたタイムスタンプの日付と時刻の直後に、DynamoDB は書き込みスループットを消費することなく、テーブルから項目を削除します。TTL は、ワークロードのニーズに合わせて最新の状態に保たれている項目のみを保持することで、保存されたデータボリュームを削減する手段として、追加料金なしで提供されます。

Amazon DynamoDB Accelerator (DAX)

■Amazon DynamoDB Accelerator (DAX) の特徴

  • フルマネージド型高可用性インメモリキャッシュで、Amazon DynamoDB 用に特化しています。
  • DAX を有効化することで、DynamoDBテーブルはミリセカンドからマイクロセカンドへの最大 10 倍のパフォーマンス向上を実現します。DAX はインメモリキャッシュを利用しているため特定のデータへの処理が高い場合などに対して性能向上が期待できます。
  • 1 秒あたりのリクエスト数が数百万件になる場合でも、ミリセカンドからマイクロセカンドへの最大 10 倍のパフォーマンス向上を実現します。
  • DAX を有効化すると、DAX クラスターは、1つのみのプライマリノードと、0~9個のリードレプリカノードを構成することができます。

DynamoDB Streams(DynamoDB ストリーム)

  • DynamoDB テーブル内の項目レベルの変更に関するシーケンスを時間順にキャプチャし、その情報を最大 24 時間ログに保存します。(実際の順序と同じ順序で表示されます。
  • アプリケーションは、このログにアクセスし、データ項目の変更前および変更後の内容をほぼリアルタイムで参照できます。
  • DynamoDB Streams は DynamoDB テーブルの変更イベントをトリガーにして、Lambda 関数などを起動することができます。
  • リージョンAで実施されたトランザクションを他のリージョン(リージョンB)にも自動的に複製させたい場合などに DynamoDB Streams を有効化します。

ストリームレコードを書き込むタイミング

アプリケーションがテーブル内のアイテムを作成、更新、または削除するたびに、DynamoDB ストリームは変更されたアイテムの主キー属性を使⽤してストリームレコードを書き込みます。

ストリームレコードには、DynamoDB テーブル内の単⼀のアイテムに対するデータ変更に関する情報が含まれています。

変更されたアイテムの「変更前」「変更後」のイメージなど、ストリームレコードが追加情報をキャプチャするようにストリームを構成できます。

DynamoDB Streams の設定

以下の設定の確認です。

デフォルトでは「ストリーム有効」「いいえ」になっています。

ストリームの管理より以下の表示タイプを設定できます。

グルーバルテーブルを作成する前に、DynamoDB Streams を「有効化」する必要があります。

DynamoDB Auto Scaling

  • DynamoDB Auto Scaling はテーブルとインデックスを監視して、アプリケーショントラフィックの変化に応じて自動的にスループットを調整します。
  • 一時的な負荷増加に対して、DynamoDB テーブル処理パフォーマンスの管理が容易になり、アプリケーションの可用性を最大化しつつ、DynamoDBのコストを削減することができます。
  • テーブルとグローバルセカンダリインデックス(GSI)の容量増加を自動化できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Classica  –  Enter Security Code
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください