[AWS CSAP]Amazon DynamoDB

本稿は、AWS Solution Architect Professional に出題される Amazon DynamoDB について個人用にまとめた記事です。

Amazon DynamoDB が出題されるシナリオ

Amazon DynamoDB が出題されるシナリオパターンをまとめました。

セカンダリインデックス

主キー以外でアプリケーションがデータを参照する必要があるという要件のシナリオで出題されます。

パーティショニング

読み込み・書き込みのキャパシティユニットの数、およびデータサイズでパーティションサイズを算出するシナリオで出題されます。

Amazon DynamoDB とは

規模に関係なく数ミリ秒台のパフォーマンスを実現する、key-value およびドキュメントデータベースです。完全マネージド型マルチリージョン、マルチマスターで耐久性があるデータベースで、セキュリティ、バックアップおよび復元と、インターネット規模のアプリケーション用のメモリ内キャッシュが組み込まれています。DynamoDB は、1 日に 10 兆件以上のリクエストを処理することができ、毎秒 2,000 万件を超えるリクエストをサポートします。
( https://aws.amazon.com/jp/dynamodb/ )

Amazon DynamoDB のインデックス

Amazon DynamoDBは、主キー値を指定することにより、テーブル内のアイテムへの高速アクセスを提供します。ただし、多くのアプリケーションでは、1つ以上のセカンダリ(または代替)キーを使用できることで、プライマリキー以外の属性を持つデータに効率的にアクセスできる必要があります。これに対処するには、テーブルに1つ以上のセカンダリインデックスを作成し、これらのインデックスに対してクエリまたはスキャン要求を発行します。

セカンダリインデックス

DynamoDB は 2 種類のセカンダリインデックスをサポートしています。

グローバルセカンダリインデックス ( GSI )

ベーステーブルと異なるパーティションキーとソートキーを持つインデックス。グローバルセカンダリインデックスは、そのインデックスのクエリは、すべてのパーティションにわたって、ベーステーブルのすべてのデータを対象に実行できるので、「グローバル」と見なされます。グローバルセカンダリインデックスにはサイズの制限はなく、読み込みアクティビティと書き込みアクティビティ用にプロビジョニングされた独自のスループット設定が、テーブルのものとは異なります。
1 テーブル当たり、最大で 5 のグローバルセカンダリインデックスを作成することができます。
テーブルに項目を入力するか、削除すると、そのテーブルのグローバルセカンダリインデックスは、結果整合性のある方法で更新されます。

ローカルセカンダリインデックス ( LSI )

ベーステーブルと同じパーティションキーと、異なるソートキーを持つインデックス。local secondary index は、local secondary index のすべてのパーティションの範囲が、同じパーティションキーの値を持つベーステーブルパーティションに限定されるという意味で「ローカル」です。その結果、任意の 1 つのパーティションキー値に対してインデックスが作成された項目の合計サイズが、10 GB を超えることはできません。
1 テーブル当たり、最大で 5 つのローカルセカンダリインデックスを作成することができます
テーブルに対するクエリと同様に、インデックスクエリでは ConsistentRead の値に応じて、結果整合性のある読み込みまたは強力な整合性のある読み込みを実行できます。1 回の強力な整合性のある読み込みでは、1 つの読み込みキャパシティーユニットが消費され、結果整合性のある読み込みではその半分が消費されます。したがって結果整合性のある読み込みを選択することで、読み込みキャパシティーユニットのコストを削減できます。

パーティショニング

DynamoDB のパーティショニングは、テーブルサイズを 10GB で割った数、もしくは、Read Capacity Unit ( RCU ) を 3000 で割った数と Write Capacity Unit ( WCU ) を 1000 で割った数の合計の大きい方をパーティション数にします。

データ容量: 100GB、RCU: 12000、WCU: 12000 の場合

サイズ: 100GB / 10GB = 10
Capacity Unit: 12000 / 3000 + 12000 / 1000 = 16

よって、パーティション数は 16 になります

グローバルテーブル

グローバルテーブルは、リージョン間でデータをレプリケートし、更新の競合を解決するという困難な作業を排除し、アプリケーションのビジネスロジックに集中できるようにします。さらに、グローバルテーブルを使用すると、地域全体の分離や劣化の可能性が低い場合でも、アプリケーションの高可用性を維持できます。

グローバルテーブルの作成方法

以下、グローバルテーブルの作成方法を示す概念的な概要です。

  • DynamoDB ストリーム が有効になっている通常の DynamoDB テーブルを AWS リージョンに作成します。
  • データをレプリケートするその他すべてのリージョンで、ステップ 1 を繰り返します。
  • 作成したテーブルに基づき、DynamoDB のグローバルテーブルを定義します。

これらのタスクは、AWS マネジメントコンソール を使用して自動化できるため、すばやく簡単にグローバルテーブルを作成することができます。

DynamoDB Accelerator (DAX)

フルマネージド型高可用性インメモリキャッシュで、DynamoDB 用に特化しており、DynamoDBテーブルの前段(論理的に)に置かれます。DAX は整合性のあるデータの読み込みに向いています。読み込みの多いテーブルがある場合、キャパシティの削減に繋がりコストダウンが見込めます。

注意事項

  • DynamoDB は結果整合性です。強い整合性を求めることもできますが、反応速度が遅くなります。
  • AWS リージョン間での強い一貫した読み取りをサポートしていません。

Auto Scaling

DynamoDB Auto Scalingは、AWS Application Auto Scalingサービスを使用して、実際のトラフィックパターンに応じて、プロビジョニングされたスループット容量をユーザーに代わって動的に調整します。これにより、テーブルまたはグローバルセカンダリインデックスは、プロビジョニングされた読み取りおよび書き込み容量を増やし、スロットルなしでトラフィックの突然の増加に対応できます。ワークロードが減少すると、Application Auto Scalingはスループットを低下させるため、未使用のプロビジョニング済み容量の費用はかかりません。

不要なデータを自動削除 ( TTL )

DynamoDBの存続時間(TTL)を使用すると、テーブル内のアイテムの有効期限を定義できるため、データベースから自動的に削除できます。

TTLは、プロビジョニングされたスループットを使用せずにストレージ使用量を削減し、無関係なデータを保存するコストを削減する方法として、追加費用なしで提供されます。テーブルでTTLを有効にすると、アイテムごとに削除のタイムスタンプを設定できるため、ストレージの使用を関連するレコードのみに制限できます。

DynamoDB ストリーム

DynamoDB ストリームは、DynamoDB テーブル内の項目に加えられた変更に関する情報の順序付けされた情報です。テーブルでストリームを有効にすると、DynamoDB はテーブル内のデータ項目に加えられた各変更に関する情報をキャプチャします。DynamoDB ストリーム は非同期的に動作するため、ストリームを有効にしてもテーブルのパフォーマンスに影響はありません。

データ更新時に Lambda を実行する

テーブルでDynamoDBストリームを有効にすると、ストリームARNを作成したLambda関数に関連付けることができます。テーブル内のアイテムが変更された直後に、テーブルのストリームに新しいレコードが表示されます。AWS Lambdaは、ストリームをポーリングし、新しいストリームレコードを検出するとLambda関数を呼び出します。

参考リンク

Black Belt Online

AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern

チートシート

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA