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 → 古い名前と新しい名前の両方が記録
設定方法
- AWS Management Console から、DynamoDB コンソールで対象テーブルを選択
- 「エクスポートとストリーム」タブを選択
- 「DynamoDB ストリームの詳細」で オンにする
- StreamViewType を選択
- 「ストリームをオンにする」をクリック
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) によって、記録する情報の粒度を選択することができます。また、用途に応じて最適な表示タイプを選択することで、効率的に変更データを扱うことができます。
参考
Discussion