グローバルテーブル: 仕組み - Amazon DynamoDB

グローバルテーブル: 仕組み

DynamoDB グローバルテーブルには、バージョン 2019.11.21 (現行)バージョン 2017.11.29 の 2 つのバージョンがあります。ご使用のバージョンを確認するには、バージョンを確認する を参照してください。

以下のセクションでは、Amazon DynamoDB におけるグローバルテーブルの概念および動作を理解することができます。

グローバルテーブルの概念

グローバルテーブルは 1 つ以上のレプリカテーブルの集合体であり、すべて単一の AWS アカウントが所有します。

レプリカテーブル (または、略してレプリカ) は、グローバルテーブルの一環として機能する単一の DynamoDB テーブルです。各レプリカには、同じデータ項目のセットが保存されます。指定のグローバルテーブルは、AWS リージョンごとに 1 つのレプリカテーブルのみを持つことができます。

以下は、グローバルテーブルの作成方法における概念的な概要です。

  1. AWS リージョンで、DynamoDB Streams を有効にしてある通常の DynamoDB テーブルを作成します。

  2. データをレプリケートする他のすべてのリージョンに対して、ステップ 1 を繰り返します。

  3. 作成したテーブルに基づいて DynamoDB グローバルテーブルを定義します。

AWS Management Console はこれらのタスクを自動化するため、グローバルテーブルをより迅速かつ簡単に作成できます。詳細については、「グローバルテーブルの作成」を参照してください。

結果の DynamoDB グローバルテーブルは、DynamoDB が単一の単位として扱う複数のレプリカテーブル (リージョンごとに 1 つ) で構成されます。すべてのレプリカは、同じテーブル名と同じプライマリキーのスキーマを持っています。アプリケーションが 1 つのリージョンのレプリカテーブルにデータを書き込むと、DynamoDB はその書き込みを他の AWS リージョンの他のレプリカテーブルに自動的に伝搬します。

重要

テーブルデータの同期を維持するために、グローバルテーブルでは、すべての項目に対して次の属性を自動的に作成します。

  • aws:rep:deleting

  • aws:rep:updatetime

  • aws:rep:updateregion

これらの属性を変更したり、同じ名前の属性を作成したりしないでください。

レプリカテーブルをグローバルテーブルに追加して、追加のリージョンで使用できるようにすることができます。(これを行うには、グローバルテーブルが空である必要があります。つまり、どのレプリカテーブルにもデータを含めることはできません。)

グローバルテーブルからレプリカテーブルを削除することもできます。これを行うと、テーブルはグローバルテーブルから完全に関連付けが解除されます。この新しく独立したテーブルは、グローバルテーブルと相互作用しなくなり、データはグローバルテーブルとの間で伝播されなくなります。

警告

レプリカの削除がアトミックプロセスではないことに注意してください。動作と既知の状態に確実に一貫させるために、削除されるレプリカからアプリケーションの書き込みトラフィックを事前に切り離しておくことをお勧めします。削除後、すべてのレプリカリージョンのエンドポイントでレプリカが関連付け解除されたものとして表示されるのを待ってから、レプリカへのそれ以降の書き込みを独自の分離リージョンテーブルとして実行してください。

整合性と競合の解決

レプリカテーブル内の項目に加えられた変更は、同じグローバルテーブル内の他のすべてのレプリカにレプリケートされます。グローバルテーブルでは、新しく書き込まれた項目は通常、数秒以内にすべてのレプリカテーブルに伝播されます。

グローバルテーブルでは、各レプリカテーブルには同じデータ項目のセットが保存されます。DynamoDB では、一部の項目のみの部分的なレプリケーションはサポートされていません。

アプリケーションは、任意のレプリカテーブルとの間でデータを読み込みおよび書き込みできます。アプリケーションが結果整合性のある読み込みのみを使用し、1 つの AWS リージョンに対して読み込みのみを発行する場合、変更を加えずに動作します。ただし、アプリケーションで強力な整合性のある読み込みが必要な場合は、同じリージョンですべての強力な整合性のある読み込みと書き込みを実行する必要があります。DynamoDB は、リージョン間での強力な整合性のある読み込みをサポートしていません。したがって、あるリージョンに書き込んで別のリージョンから読み込む場合、読み込みの応答には、他のリージョンで最近完了した書き込みの結果を反映していない古いデータが含まれる可能性があります。

アプリケーションが異なるリージョンにある同一項目をほぼ同時に更新すると、競合が発生する可能性があります。結果整合性を確保するために、DynamoDB グローバルテーブルでは最終書き込み者優先を使用して、同時更新間の調整を行い、DynamoDB は最終書き込み者を判断するために最善を尽くします。この競合解決メカニズムでは、すべてのレプリカが最新の更新に合意し、すべてのレプリカが同一のデータを持つ状態に収束します。

可用性と耐久性

単一の AWS リージョンが分離または低下した場合、アプリケーションは別のリージョンにリダイレクトし、別のレプリカテーブルに対して読み込みと書き込みを実行できます。カスタムビジネスロジックを適用して、リクエストを他のリージョンにリダイレクトするタイミングを決定できます。

リージョンが分離または縮退した場合、DynamoDB は、実行されたが、まだすべてのレプリカテーブルに反映されていない書き込みを追跡します。リージョンがオンラインに戻ると、DynamoDB はそのリージョンから他のリージョンのレプリカテーブルへの保留中の書き込みの伝播を再開します。また、他のレプリカテーブルから現在オンラインに戻っているリージョンへの書き込みの伝播も再開します。