📝

DynamoDB ストリームとは

2021/04/21に公開

DynamoDB ストリームとは

DynamoDB Streams の変更データキャプチャ - Amazon DynamoDB

DynamoDB ストリーム は、DynamoDB テーブル内の項目レベルの変更の時系列シーケンスをキャプチャし、この情報を最大 24 時間ログに保存します。
保管時の暗号化では、DynamoDB ストリームのデータが暗号化されます。
DynamoDBテーブルでストリームを有効にすると、DynamoDB はテーブル内のデータ項目に加えられた各変更に関する情報をキャプチャします。

DynamoDB のテーブルのデータに変更があった時にその変更情報を暗号化してログに保存しておくということのようです。

メリット

  • 各ストリームレコードは、ストリームに 1 回だけ出現
  • DynamoDB テーブルで変更された各項目について、ストリームレコードは項目に対する実際の変更と同じ順序で出現
  • DynamoDB ストリーム は、ストリームレコードをほぼリアルタイムで書き込むため、これらのストリームを使用し、内容に基づいてアクションを実行するアプリケーションを構築できる

変更があったらリアルタイムで何かの処理をしたいときに使うようです。

エンドポイントが別々

AWS では、DynamoDB と DynamoDB ストリーム. に別個のエンドポイントが維持されます。
データベースのテーブルとインデックスを使用するには、アプリケーションが DynamoDB エンドポイントにアクセスする必要があります。DynamoDB ストリーム レコードを読み込んで処理するには、アプリケーションが同じリージョンの DynamoDB ストリーム エンドポイントにアクセスする必要があります。

テーブルへのアクセスとストリームへのアクセスのエンドポイントは別々なんですね。

設定方法

新しいテーブルでは、そのテーブルの作成時にストリームを有効にできます。既存のテーブルでストリームを有効または無効にすることや、ストリームの設定を変更することができます。DynamoDB ストリーム は非同期的に動作するため、ストリームを有効にしてもテーブルのパフォーマンスに影響はありません。
ストリームはいつでも有効または無効にできます。

  • テーブル作成時
  • 既存のテーブルで有効・無効を設定
  • パフォーマンスに影響はない
  • マネジメントコンソールでもできる

ストリームレコードとシャード

ストリームは、ストリームレコードで構成されています。各ストリームレコードは、ストリームが属する DynamoDB テーブル内の 1 件のデータ変更を表しています。
ストリームレコードは、グループ (つまり、シャード) に整理されます。

  • ストリームレコードは 1 つの変更に関するデータ
  • ストリームレコードが集まるとシャード
  • ストリームレコードとシャードを含む全体がストリーム

データの保持について

DynamoDB ストリーム 内のすべてのデータは、24 時間保持されます。特定のテーブルの直近 24 時間のアクティビティを取得して分析できます。ただし、24 時間を超えたデータはすぐにトリミング (削除) される可能性があります。
テーブルのストリームを無効にした場合、ストリーム内のデータは 24 時間読み込み可能な状態になります。この時間が経過すると、データは期限切れになり、ストリームレコードは自動的に削除されます。既存のストリームを手動で削除するためのメカニズムはありません。保持期限 (24 時間) が切れ、すべてのストリームレコードが削除されるまで待つ必要があります。

  • 24 時間保持
  • 24 時間を超えるとすぐに削除される可能性がある
  • ストリームを無効にすると 24 時間は読み込めるが、24 時間を超えると期限切れで自動削除
  • 手動削除不可

ユースケース

AWS再入門ブログリレー DynamoDB編 | DevelopersIO

  • ある AWS リージョンのアプリケーションが、DynamoDB テーブルのデータを変更します。別の AWS リージョンの 2 番目のアプリケーションがそのデータ変更を読み込み、データを別のテーブルに書き込みます。このとき、元のテーブルと同期されたレプリカを作成します。
  • 人気のモバイルアプリは、1 秒あたり数千件の更新速度で、DynamoDB テーブルのデータを変更します。別のアプリケーションは、これらの更新に関するデータをキャプチャして保存し、モバイルアプリの使用状況メトリクスをほぼリアルタイムで提供します。
  • グローバルなマルチプレーヤーゲームには、データを複数の AWS リージョンに保存するマルチマスタートポロジがあります。各マスターは、リモートリージョンで発生した変更を使用および再現することにより同期されます。
  • アプリケーションは、友人の 1 人が新しい画像をアップロードするとすぐに、グループ内のすべての友人のモバイルデバイスに通知を自動送信します。
  • 新しいお客様がデータを DynamoDB テーブルに追加します。このイベントにより、新しいお客様にようこそメールを送信する別のアプリケーションが起動されます。

ざっくりまとめると大規模なシステムでのリアルタイム処理といったところでしょうか。

まとめ

今回は DynamoDB ストリームについて調べてみました。
以下がポイントでした。

  • DynamoDB のテーブルのデータに変更があった時に、その変更情報を暗号化してログに保存
  • 変更をトリガーにリアルタイム処理が可能
  • テーブルへのアクセスとストリームへのアクセスのエンドポイントは別々
  • テーブル作成時だけでなく作成後でも有効・無効を設定でき、パフォーマンスに影響しない
  • ストリームレコードは 1 つの変更に関するデータ
  • ストリームレコードが集まるとシャード
  • ストリームレコードとシャードを含む全体がストリーム
  • 変更データは 24 時間を超えるとすぐに削除される可能性がある
  • 無効にすると 24 時間は保持され、手動削除は不可

これでもまだ機能の一部だとは思いますが、どなたかの参考になれば幸いです。

参考資料

Discussion