グローバルテーブル: 仕組み
DynamoDB グローバルテーブルには、バージョン 2019.11.21 (現行) と バージョン 2017.11.29 の 2 つのバージョンがあります。ご使用のバージョンを確認するには、バージョンを確認する を参照してください。 |
以下のセクションでは、Amazon DynamoDB におけるグローバルテーブルの概念および動作を理解することができます。
グローバルテーブルの概念
グローバルテーブルは 1 つ以上のレプリカテーブルの集合体であり、すべて単一の AWS アカウントが所有します。
レプリカテーブル (または、略してレプリカ) は、グローバルテーブルの一環として機能する単一の DynamoDB テーブルです。各レプリカには、同じデータ項目のセットが保存されます。指定のグローバルテーブルは、AWS リージョンごとに 1 つのレプリカテーブルのみを持つことができます。グローバルテーブルの詳しい使用方法については、チュートリアル: グローバルテーブルの作成 を参照してください。
DynamoDB グローバルテーブルを作成すると、DynamoDB は 1 つの単位として扱う複数のレプリカテーブル (リージョンごとに 1 つ) で構成されます。すべてのレプリカは、同じテーブル名と同じプライマリキーのスキーマを持っています。アプリケーションが 1 つのリージョンのレプリカテーブルにデータを書き込むと、DynamoDB はその書き込みを他の AWS リージョンの他のレプリカテーブルに自動的に伝播します。
レプリカテーブルをグローバルテーブルに追加して、追加のリージョンで使用できるようにすることができます。
整合性と競合の解決
レプリカテーブル内の項目に加えられた変更は、同じグローバルテーブル内の他のすべてのレプリカにレプリケートされます。グローバルテーブルでは、新しく書き込まれた項目は通常、1 秒以内にすべてのレプリカテーブルに伝播されます。
グローバルテーブルでは、各レプリカテーブルには同じデータ項目のセットが保存されます。DynamoDB では、一部の項目のみの部分的なレプリケーションはサポートされていません。
アプリケーションは、任意のレプリカテーブルとの間でデータを読み込みおよび書き込みできます。アプリケーションが結果整合性のある読み込みのみを使用し、1 つの AWS リージョンに対して読み込みのみを発行する場合、変更を加えずに動作します。ただし、アプリケーションで強力な整合性のある読み込みが必要な場合は、同じリージョンですべての強力な整合性のある読み込みと書き込みを実行する必要があります。DynamoDB は、リージョン間での強力な整合性のある読み込みをサポートしていません。したがって、あるリージョンに書き込んで別のリージョンから読み込む場合、読み込みの応答には、他のリージョンで最近完了した書き込みの結果を反映していない古いデータが含まれる可能性があります。
アプリケーションが異なるリージョンにある同一項目をほぼ同時に更新すると、競合が発生する可能性があります。結果整合性を確保するために、DynamoDB グローバルテーブルでは最終書き込み者優先を使用して、同時更新間の調整を行い、DynamoDB は最終書き込み者を判断するために最善を尽くします。この競合解決メカニズムでは、すべてのレプリカが最新の更新に合意し、すべてのレプリカが同一のデータを持つ状態に収束します。
可用性と耐久性
単一の AWS リージョンが分離または低下した場合、アプリケーションは別のリージョンにリダイレクトし、別のレプリカテーブルに対して読み込みと書き込みを実行できます。カスタムビジネスロジックを適用して、リクエストを他のリージョンにリダイレクトするタイミングを決定できます。
リージョンが分離または縮退した場合、DynamoDB は、実行されたが、まだすべてのレプリカテーブルに反映されていない書き込みを追跡します。リージョンがオンラインに戻ると、DynamoDB はそのリージョンから他のリージョンのレプリカテーブルへの保留中の書き込みの伝播を再開します。また、他のレプリカテーブルから現在オンラインに戻っているリージョンへの書き込みの伝播も再開します。