😺

DynamoDB Streams の表示タイプ (StreamViewType)

に公開

はじめに

DynamoDB Streams を使うと、テーブル内のデータ変更を ほぼリアルタイムで取得 できます。しかし、変更内容の「どこまで詳細に取得するか」は設定次第です。それが 表示タイプ(StreamViewType) です。

この記事では、表示タイプの種類と使い分けについてわかりやすく整理します。

DynamoDB Streams とは?

DynamoDB Streams は、テーブルの変更履歴を 時系列で記録する仕組み です。

ストリームレコード
テーブルの1件のデータ変更を表す。

シャード
ストリームレコードをまとめるコンテナ。親子構造があり順序を守って処理される。

保持期間
レコードは最大24時間保持される。

非同期処理
テーブルのパフォーマンスにほとんど影響しない。

簡単に言うと、「誰がいつ何を変更したか」のログを追える機能です。

表示タイプ (StreamViewType) の種類

ストリームにどの情報を載せるかは StreamViewType で指定します。設定可能な StreamViewType は以下の通りです。

表示タイプ 内容 こんなときに便利
KEYS_ONLY 変更された項目の 主キーだけ を記録 「どのアイテムが変更されたか」だけ知りたい場合
NEW_IMAGE 変更後の 全属性 を記録 INSERTやUPDATE後の最新状態を取得したい場合
OLD_IMAGE 変更前の 全属性 を記録 更新前や削除前の状態を取得したい場合
NEW_AND_OLD_IMAGES 変更前後の 両方 を記録 更新前後の差分を比較したい場合

使い方のイメージ

例えば、ユーザー情報テーブルで「名前」を変更した場合、下記のような感じで使用します。

KEYS_ONLY → user_id のみストリームに記録

NEW_IMAGE → 新しい名前を含むレコードが記録

OLD_IMAGE → 古い名前を含むレコードが記録

NEW_AND_OLD_IMAGES → 古い名前と新しい名前の両方が記録

設定方法

  1. AWS Management Console から、DynamoDB コンソールで対象テーブルを選択
  2. 「エクスポートとストリーム」タブを選択
  3. 「DynamoDB ストリームの詳細」で オンにする
  4. StreamViewType を選択
  5. 「ストリームをオンにする」をクリック

AWS CLI / SDK からだと、下記のように設定します。

{
  "StreamSpecification": {
    "StreamEnabled": true,
    "StreamViewType": "NEW_AND_OLD_IMAGES"
  }
}

StreamEnabled = true → 有効化

StreamViewType = 記録内容(KEYS_ONLY / NEW_IMAGE / OLD_IMAGE / NEW_AND_OLD_IMAGES)

選び方のポイント

各StreamViewType の選び方は以下の通りです。

パフォーマンス重視 → KEYS_ONLY

変更後の状態だけ欲しい → NEW_IMAGE

変更前の状態も必要 → OLD_IMAGE

差分を比較したい → NEW_AND_OLD_IMAGES

ストリームは非同期なのでテーブル性能にはほとんど影響ありませんが、記録する情報が多いほど ストリームのサイズや処理コスト が増えることに注意。

まとめ

DynamoDB Streams はテーブルの変更履歴を取得できる強力な仕組みです。表示タイプ (StreamViewType) によって、記録する情報の粒度を選択することができます。また、用途に応じて最適な表示タイプを選択することで、効率的に変更データを扱うことができます。

参考

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Streams.html

Discussion