助け合いフォーラム
AWS ソリューションアーキテクト - アソシエイト(SAA-C03)
問題ID : 35733
問題を開く
Amazon DynamoDBにおいて、世界各地にいるユーザーの読み込みと書き込みが高速化する機能はどれか。
正解
グローバルテーブル
解説
DynamoDBのグローバルテーブルは、DynamoDBテーブルを複数のリージョンにまたがって運用できるサービスです。複数のリージョンにDynamoDBテーブルが自動的にレプリケートされ、ユーザーは地理的に近いリージョンのDynamoDBテーブルへ高速な読み込みと書き込みが可能です。データのレプリケーションは通常1秒以内に完了し、リージョン間のデータ冗長化によって高可用性が確保されます。
グローバルテーブルでは、通常は1秒以内にグローバルテーブル内の他リージョンのDynamoDBテーブルすべてにレプリケートされます。また、複数リージョンでデータが冗長化されるので高可用性が確保されます。
したがって正解は
・グローバルテーブル
です。
グローバルテーブルのレプリケーション先のリージョンはユーザーが指定します。

その他の選択肢については、以下のとおりです。
・DynamoDB Accelerator(DAX)
DynamoDBのインメモリキャッシュクラスタです。
キャッシュを利用して読み込みは高速化できますが、書き込みは高速化できないので誤りです。
・DynamoDB Streams
テーブルに対して行われた直近の24時間の変更(追加や更新、削除)をログに保存する機能です。
読み込みと書き込みの高速化には関係ないので、誤りです。
・ポイントインタイムリカバリ
DynamoDBの自動バックアップ機能です。
読み込みと書き込みの高速化には関係ないので、誤りです。
グローバルテーブルでは、通常は1秒以内にグローバルテーブル内の他リージョンのDynamoDBテーブルすべてにレプリケートされます。また、複数リージョンでデータが冗長化されるので高可用性が確保されます。
したがって正解は
・グローバルテーブル
です。
グローバルテーブルのレプリケーション先のリージョンはユーザーが指定します。

その他の選択肢については、以下のとおりです。
・DynamoDB Accelerator(DAX)
DynamoDBのインメモリキャッシュクラスタです。
キャッシュを利用して読み込みは高速化できますが、書き込みは高速化できないので誤りです。
・DynamoDB Streams
テーブルに対して行われた直近の24時間の変更(追加や更新、削除)をログに保存する機能です。
読み込みと書き込みの高速化には関係ないので、誤りです。
・ポイントインタイムリカバリ
DynamoDBの自動バックアップ機能です。
読み込みと書き込みの高速化には関係ないので、誤りです。
参考
【Amazon DynamoDB】
Amazon DynamoDBは、AWSが提供するフルマネージド型のNoSQLデータベースサービスです。「NoSQL」は多くの場合、SQLを使用する「リレーショナルデータベース(RDB)」に属さないデータベースという意味で使われます。
下記はAWSが提供する主なデータベースサービスです。

本項では、DynamoDBのデータ構造、高可用性、キャパシティ、データ参照時の一貫性、自動スケール、Time To Live(TTL)について解説します。
■データ構造
DynamoDBはKey-Value構造を基本としつつ、JSON形式のようなドキュメント型の柔軟性も兼ね備えています。
○Key-Value型
DynamoDBでは、Key-Value型という「保存するデータ(Value)」と、それを特定するための「キー(Key)」のペアで構成される形式のデータを扱います。例えば「ユーザーが保有しているアイテム」を管理するには、以下のように格納できます。

新たにアイテムが追加された場合や、初めて保有するアイテムを登録する場合でも、既存のデータ構造を変更することなく新しい項目を追加できます。
Key-Value型で構成されたデータの集合を「テーブル」と呼びます。複数のテーブルを結合して分析するような用途よりも、上記のように単一のデータを高速に格納・取得するシンプルな利用に向いています。
シンプルな構造のためパフォーマンスが非常に高く、ピーク時には1秒あたり最大2000万件のリクエストに対応可能です。さらに、ストレージに上限がないため、非常に高いスケーラビリティを実現します。
○ドキュメント型
DynamoDBでは、階層構造を持つ「ドキュメント型」のデータも扱うことができます。

構造的にはKey-Value型をベースとしていますが、ドキュメント型ではネストされた複雑なデータ構造もJSON形式で格納可能です。
DynamoDBは「スキーマレス」なデータベースで、属性の追加や変更を柔軟にできます。スキーマとはデータベースの構造定義のことを指します。通常、項目を追加する際にはスキーマの定義変更とデータ移行が必要ですが、DynamoDBではプライマリキー以外の属性に関しては事前定義が不要であり、任意の項目を動的に追加できます。さらに、DynamoDBではテーブルにインデックスを定義することによって、データへの高速アクセスが可能です。
■キャパシティ
DynamoDBでは、読み書きの処理量と課金体系が密接に関係しています。以下の2つの利用モードが提供されています。
○オンデマンドモード
読み書きリクエスト数に応じた従量課金なので、アクセス頻度が予測不能なワークロードに適しています。
○プロビジョンドモード
事前に1秒間あたりの読み書き量(キャパシティユニット)を設定する方式で、アクセス頻度が予測できるワークロードに適しています。
プロビジョンドモードの書き込み・読み込みは、「キャパシティユニット」という単位で管理されています。これは1秒間にどれだけ読み込み・書き込みを行うかを予約する設定で、容量が大きいほど料金がかかります。

初期値はRCU(Read Capacity Unit)/WCU(Write Capacity Unit)ともに5に設定されており、ユーザーは随時変更可能です。また、DynamoDBは負荷に応じてキャパシティユニットを自動でスケーリングできるため、一定のパフォーマンスを維持しつつ、コストを抑えることが可能です。
大規模な運用が見込まれる場合は「リザーブドキャパシティ」の利用が推奨されます。RCU/WCUを100ユニット単位で1年または3年契約で予約購入することで、通常のプロビジョンドモードよりもコストを削減できるプランです。
・キャパシティユニットとパーティション
パーティションの数やサイズは、プロビジョニングしたキャパシティユニットの値に応じてAWS側で自動的に算出・調整されます。キャパシティユニットが大きくなると、対応するパーティション数も増加し、スループットが維持されます。
■高可用性
○3つのAZにデータを分散して保存
DynamoDBは、単一障害点(SPOF: Single Point Of Failure)を排除した設計となっており、高い可用性と耐障害性を実現しています。データは、3つの異なるAZに自動的にレプリケートされ、障害発生時にも可用性が維持されます。

各AZに保存されるデータは「パーティション」単位で分割されており、パーティション分散により、データが特定のノードに集中しないようになっています。 これにより、プロビジョニングされたスループットの安定的な確保が可能です。なお、パーティションの管理と分散はAWSが自動で行うため、ユーザーが設定する必要はありません。
○バックアップ
DynamoDBでは、自動で行う「ポイントインタイムリカバリ(PITR)」と手動で行う「オンデマンドバックアップ」の2種類のバックアップ方式が提供されています。
・ポイントインタイムリカバリ(PITR)
有効化することで、過去35日間の任意の時点にデータを復元できる差分バックアップ機能が利用可能です。自動的かつ継続的にバックアップが取得されるため、復旧時の操作が容易です。
・オンデマンドバックアップ
ユーザーが任意のタイミングで、マネジメントコンソールやAPIを通じて完全なバックアップを取得できます。
○S3へのエクスポート
DynamoDBは、既存のテーブルデータをAmazon S3に直接エクスポートする機能を提供しています。エクスポートは、アプリケーションコードを記述することなく、簡単に実行できます。

S3へのエクスポートには、内部的にポイントインタイムリカバリ(PITR)の仕組みを利用しているため、事前にPITRを有効化しておく必要があります。
■データ参照時の一貫性
アプリケーションがデータを書き込むと、DynamoDBは3つのAZにレプリケートされたデータのうち、2つへの書き込みが成功した時点で処理を完了と見なします。残り1つのAZには非同期的にレプリケーションが行われるため、一時的に古いデータが参照される可能性があります。
DynamoDBでは2種類の読み込みモードが提供されています。
○結果整合性のある読み込み(デフォルト)
読み込み時に直前の更新が反映されていない可能性がありますが、時間の経過とともに整合性が確保されます。一時的に古いデータが取得されることが許容されるケースに適しています。
○強い整合性のある読み込み
レイテンシーが高くなる可能性がありますが、常に最新のデータを取得できます。
■自動スケール
DynamoDBでは、データ量やトラフィックの増加に応じて自動的にスケールアウト(拡張)されます。ノードの追加やディスク容量の管理などをユーザーが行う必要はなく、ダウンタイムなしで継続的にサービスを提供できます。
■Time To Live(TTL)
Time To Live(TTL)は、指定した時刻に一時データなどを自動で削除する機能です。項目にTTL属性を設定することで、期限を過ぎたデータが自動的に削除されます。削除処理は完全に自動で行われ、追加の管理作業やDynamoDB側での課金は発生しません。不要なデータを効率的に削除することで、ストレージコストの最適化にもなります。
【DynamoDB Streams】
DynamoDB Streamsは、テーブルに対して行われた直近24時間の変更(追加・更新・削除)をログとして保持する機能です。ストリームを利用することで、いつ・どのような更新が行われたかを追跡できます。
ログはアプリケーションからリアルタイムに参照可能で、変更に応じたイベント駆動処理を構築できます。たとえば、特定の更新をトリガーにアラートを発報する、プロフィール画像の変更をフレンドに通知するといったユースケースが考えられます。
なお、Streamsは非同期で動作するため、元のテーブルのパフォーマンスに影響を与えることはありません。

【DynamoDB Accelerator(DAX)】
DynamoDB Accelerator(DAX)は、DynamoDB向けのインメモリキャッシュサービスです。DAXを利用することで、通常ミリ秒単位のレスポンスを、マイクロ秒レベルまで短縮できます。
DAXのキャッシュからデータを取得できる場合、DynamoDB自体への読み込みリクエスト回数が減少するため、パフォーマンス向上とコスト削減の両立が可能です。

Amazon DAXクラスターでは、保管時の暗号化と転送中の暗号化の両方とも、クラスター作成時にのみ設定できます。既存のクラスターに対して後から暗号化設定を変更することはできません。そのため、暗号化を実装するには、既存のクラスターを削除し、必要な暗号化設定を有効にして新しいクラスターを作成する必要があります。
【グローバルテーブル】
DynamoDBのグローバルテーブルは、DynamoDBテーブルを複数のリージョンにまたがって運用できるサービスです。複数のリージョンにDynamoDBテーブルが自動的にレプリケートされ、ユーザーは地理的に近いリージョンのDynamoDBテーブルへ高速な読み込みと書き込みが可能です。データのレプリケーションは通常1秒以内に完了し、リージョン間のデータ冗長化によって高可用性が確保されます。
グローバルテーブルのレプリケート先のリージョンはユーザーが指定します。

Amazon DynamoDBは、AWSが提供するフルマネージド型のNoSQLデータベースサービスです。「NoSQL」は多くの場合、SQLを使用する「リレーショナルデータベース(RDB)」に属さないデータベースという意味で使われます。
下記はAWSが提供する主なデータベースサービスです。

本項では、DynamoDBのデータ構造、高可用性、キャパシティ、データ参照時の一貫性、自動スケール、Time To Live(TTL)について解説します。
■データ構造
DynamoDBはKey-Value構造を基本としつつ、JSON形式のようなドキュメント型の柔軟性も兼ね備えています。
○Key-Value型
DynamoDBでは、Key-Value型という「保存するデータ(Value)」と、それを特定するための「キー(Key)」のペアで構成される形式のデータを扱います。例えば「ユーザーが保有しているアイテム」を管理するには、以下のように格納できます。

新たにアイテムが追加された場合や、初めて保有するアイテムを登録する場合でも、既存のデータ構造を変更することなく新しい項目を追加できます。
Key-Value型で構成されたデータの集合を「テーブル」と呼びます。複数のテーブルを結合して分析するような用途よりも、上記のように単一のデータを高速に格納・取得するシンプルな利用に向いています。
シンプルな構造のためパフォーマンスが非常に高く、ピーク時には1秒あたり最大2000万件のリクエストに対応可能です。さらに、ストレージに上限がないため、非常に高いスケーラビリティを実現します。
○ドキュメント型
DynamoDBでは、階層構造を持つ「ドキュメント型」のデータも扱うことができます。

構造的にはKey-Value型をベースとしていますが、ドキュメント型ではネストされた複雑なデータ構造もJSON形式で格納可能です。
DynamoDBは「スキーマレス」なデータベースで、属性の追加や変更を柔軟にできます。スキーマとはデータベースの構造定義のことを指します。通常、項目を追加する際にはスキーマの定義変更とデータ移行が必要ですが、DynamoDBではプライマリキー以外の属性に関しては事前定義が不要であり、任意の項目を動的に追加できます。さらに、DynamoDBではテーブルにインデックスを定義することによって、データへの高速アクセスが可能です。
■キャパシティ
DynamoDBでは、読み書きの処理量と課金体系が密接に関係しています。以下の2つの利用モードが提供されています。
○オンデマンドモード
読み書きリクエスト数に応じた従量課金なので、アクセス頻度が予測不能なワークロードに適しています。
○プロビジョンドモード
事前に1秒間あたりの読み書き量(キャパシティユニット)を設定する方式で、アクセス頻度が予測できるワークロードに適しています。
プロビジョンドモードの書き込み・読み込みは、「キャパシティユニット」という単位で管理されています。これは1秒間にどれだけ読み込み・書き込みを行うかを予約する設定で、容量が大きいほど料金がかかります。

初期値はRCU(Read Capacity Unit)/WCU(Write Capacity Unit)ともに5に設定されており、ユーザーは随時変更可能です。また、DynamoDBは負荷に応じてキャパシティユニットを自動でスケーリングできるため、一定のパフォーマンスを維持しつつ、コストを抑えることが可能です。
大規模な運用が見込まれる場合は「リザーブドキャパシティ」の利用が推奨されます。RCU/WCUを100ユニット単位で1年または3年契約で予約購入することで、通常のプロビジョンドモードよりもコストを削減できるプランです。
・キャパシティユニットとパーティション
パーティションの数やサイズは、プロビジョニングしたキャパシティユニットの値に応じてAWS側で自動的に算出・調整されます。キャパシティユニットが大きくなると、対応するパーティション数も増加し、スループットが維持されます。
■高可用性
○3つのAZにデータを分散して保存
DynamoDBは、単一障害点(SPOF: Single Point Of Failure)を排除した設計となっており、高い可用性と耐障害性を実現しています。データは、3つの異なるAZに自動的にレプリケートされ、障害発生時にも可用性が維持されます。

各AZに保存されるデータは「パーティション」単位で分割されており、パーティション分散により、データが特定のノードに集中しないようになっています。 これにより、プロビジョニングされたスループットの安定的な確保が可能です。なお、パーティションの管理と分散はAWSが自動で行うため、ユーザーが設定する必要はありません。
○バックアップ
DynamoDBでは、自動で行う「ポイントインタイムリカバリ(PITR)」と手動で行う「オンデマンドバックアップ」の2種類のバックアップ方式が提供されています。
・ポイントインタイムリカバリ(PITR)
有効化することで、過去35日間の任意の時点にデータを復元できる差分バックアップ機能が利用可能です。自動的かつ継続的にバックアップが取得されるため、復旧時の操作が容易です。
・オンデマンドバックアップ
ユーザーが任意のタイミングで、マネジメントコンソールやAPIを通じて完全なバックアップを取得できます。
○S3へのエクスポート
DynamoDBは、既存のテーブルデータをAmazon S3に直接エクスポートする機能を提供しています。エクスポートは、アプリケーションコードを記述することなく、簡単に実行できます。

S3へのエクスポートには、内部的にポイントインタイムリカバリ(PITR)の仕組みを利用しているため、事前にPITRを有効化しておく必要があります。
■データ参照時の一貫性
アプリケーションがデータを書き込むと、DynamoDBは3つのAZにレプリケートされたデータのうち、2つへの書き込みが成功した時点で処理を完了と見なします。残り1つのAZには非同期的にレプリケーションが行われるため、一時的に古いデータが参照される可能性があります。
DynamoDBでは2種類の読み込みモードが提供されています。
○結果整合性のある読み込み(デフォルト)
読み込み時に直前の更新が反映されていない可能性がありますが、時間の経過とともに整合性が確保されます。一時的に古いデータが取得されることが許容されるケースに適しています。
○強い整合性のある読み込み
レイテンシーが高くなる可能性がありますが、常に最新のデータを取得できます。
■自動スケール
DynamoDBでは、データ量やトラフィックの増加に応じて自動的にスケールアウト(拡張)されます。ノードの追加やディスク容量の管理などをユーザーが行う必要はなく、ダウンタイムなしで継続的にサービスを提供できます。
■Time To Live(TTL)
Time To Live(TTL)は、指定した時刻に一時データなどを自動で削除する機能です。項目にTTL属性を設定することで、期限を過ぎたデータが自動的に削除されます。削除処理は完全に自動で行われ、追加の管理作業やDynamoDB側での課金は発生しません。不要なデータを効率的に削除することで、ストレージコストの最適化にもなります。
【DynamoDB Streams】
DynamoDB Streamsは、テーブルに対して行われた直近24時間の変更(追加・更新・削除)をログとして保持する機能です。ストリームを利用することで、いつ・どのような更新が行われたかを追跡できます。
ログはアプリケーションからリアルタイムに参照可能で、変更に応じたイベント駆動処理を構築できます。たとえば、特定の更新をトリガーにアラートを発報する、プロフィール画像の変更をフレンドに通知するといったユースケースが考えられます。
なお、Streamsは非同期で動作するため、元のテーブルのパフォーマンスに影響を与えることはありません。

【DynamoDB Accelerator(DAX)】
DynamoDB Accelerator(DAX)は、DynamoDB向けのインメモリキャッシュサービスです。DAXを利用することで、通常ミリ秒単位のレスポンスを、マイクロ秒レベルまで短縮できます。
DAXのキャッシュからデータを取得できる場合、DynamoDB自体への読み込みリクエスト回数が減少するため、パフォーマンス向上とコスト削減の両立が可能です。

Amazon DAXクラスターでは、保管時の暗号化と転送中の暗号化の両方とも、クラスター作成時にのみ設定できます。既存のクラスターに対して後から暗号化設定を変更することはできません。そのため、暗号化を実装するには、既存のクラスターを削除し、必要な暗号化設定を有効にして新しいクラスターを作成する必要があります。
【グローバルテーブル】
DynamoDBのグローバルテーブルは、DynamoDBテーブルを複数のリージョンにまたがって運用できるサービスです。複数のリージョンにDynamoDBテーブルが自動的にレプリケートされ、ユーザーは地理的に近いリージョンのDynamoDBテーブルへ高速な読み込みと書き込みが可能です。データのレプリケーションは通常1秒以内に完了し、リージョン間のデータ冗長化によって高可用性が確保されます。
グローバルテーブルのレプリケート先のリージョンはユーザーが指定します。

DynamoDB Accelerator(DAX)のデメリットは?
h
hidaken
投稿日 2024/05/02
SB Creative出版のAWS認定ソリューションアーキテクト[アソシエイト]によるとDAXは下記のメリットがあるようです。
・読み取りの高速化
・RCUの確保を抑え、コスト削減
デメリットの記載がなく、この記載のみを鵜呑みにした場合なぜデフォルトではない?と疑問を待ちます。
デメリットが分かれば教えてください。
2024/05/06 22:24
質問の元は
SB Creative出版のAWS認定ソリューションアーキテクト[アソシエイト]によるとDAXは下記のメリットがあるようです。
デメリットの記載がなく、この記載のみを鵜呑みにした場合
ということですので、SB Creativeに質問すべき内容ではないかなと思います。
コメント
この投稿に対して返信しませんか?
t tetsukai
2024/12/07 17:46
DAXは管理負荷もありますし、DAX利用の料金もかかります。あくまで読み取りの高速化をする際のアドオンサービスという位置付けだと思います。