グローバルテーブルは、複数のリージョンにまたがり、低レイテンシのアクセスと高可用性を必要とするサービスで使用します。グローバルテーブルは、リージョン間でデータを自動的に同期し、クロスリージョンディザスタリカバリを可能にします。この機能は、最寄りリージョンでの読み書き、およびディザスタリカバリのスイッチオーバーをサポートします。
仕組み
グローバルテーブルは、Tablestore のマルチリージョンレプリケーション技術を利用して、異なるリージョンのインスタンス間にデータ同期チャネルを作成します。あるリージョンのテーブル内のデータが変更されると、その変更は他のリージョンのレプリカテーブルに自動的に同期されます。このプロセスにより、クロスリージョンでのデータ整合性が保証されます。異なるインスタンスやリージョンにまたがるテーブルレプリカを動的に追加または削除できます。
レプリケーションプロセス全体は、手動での介入なしにバックグラウンドで自動的に実行されます。このメカニズムは、データ整合性を確保しつつ、許容可能な目標復旧時点 (RPO) を達成します。これにより、ほとんどの業務システムのディザスタリカバリと業務継続性の要件を効果的に満たします。
日常的な使用では、ユーザーやアプリケーションは最寄りのレプリカにアクセスして読み書き操作を行うことができます。これにより、アクセスレイテンシが大幅に削減されます。データセンターの停止や自然災害などのリージョン障害や大規模災害が発生した場合、複数のレプリカを使用して迅速にディザスタリカバリのスイッチオーバーを開始できます。これにより、重要なアプリケーションとデータを再構築し、業務継続性を確保できます。
特徴
| マルチリージョンディザスタリカバリ テーブルレプリカは複数のリージョンに分散されます。リージョン障害が発生した場合でも、他のリージョンのレプリカがサービスを提供し続けることができます。 |
| 低レイテンシのアクセス ユーザーやアプリケーションは、最寄りのレプリカでデータの読み書きができます。これにより、操作のレイテンシが大幅に削減されます。 | ||
| 結果整合性 グローバルテーブルは結果整合性モデルを使用します。データは複数のレプリカ間で非同期に同期され、結果整合性を達成します。 |
| 自動的な競合解決 システムは、Last Write Win (LLW) アルゴリズムを使用して、複数の場所からの同時書き込み競合を自動的に処理します。 |
利用シーン
グローバルテーブルは、高可用性、低レイテンシのクロスリージョン読み書き、およびクロスリージョンディザスタリカバリを必要とするビジネスシナリオに適しています。典型的なシナリオは次のとおりです:
クロスリージョンバックアップ:プライマリリージョンで障害が発生した場合、セカンダリリージョンに切り替えて読み取りサービスを継続し、業務継続性を確保できます。たとえば、e コマースシステムがプライマリのユーザーテーブルを中国 (杭州) リージョンの Tablestore インスタンスに保存し、レプリカテーブルを中国 (北京) リージョンに保存しているとします。中国 (杭州) リージョンで障害が発生した場合、中国 (北京) のインスタンスがクエリサービスを提供し続けます。
1 つのリージョンで書き込み、複数のリージョンで読み取り:最寄りのリージョンにデータを書き込み、他の近くのリージョンから読み取ります。これは、リモートアクセスの高速化が必要なシナリオに適しています。たとえば、あるサービスのプライマリ書き込み操作は中国 (杭州) リージョンに向けられます。読み取り専用のレプリカは、低レイテンシのクロスリージョン読み取りの需要を満たすために、中国 (北京) および中国 (ウランチャブ) リージョンにデプロイされます。
グローバルテーブルのリージョンサポート:グローバルテーブルは現在、中国 (杭州)、中国 (上海)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (フフホト)、中国 (ウランチャブ)、中国 (深セン)、中国 (広州)、および中国 (成都) リージョンでサポートされています。
グローバルテーブルの作成
サービスをアクティベートしてインスタンスを作成します。プライマリリージョンとターゲットレプリカリージョンの両方でインスタンスを作成します。
ステップ 1:ベーステーブルの準備
プライマリリージョンで、グローバルテーブルのベースとなるデータテーブルを作成します。
既存のデータテーブルをグローバルテーブルのベーステーブルとして使用する場合、テーブルが次の構成要件を満たしていることを確認してください:生存時間 (TTL) が -1、バージョンの最大数が 1、最大バージョンオフセットが MaxInt32 (2147483647) に設定されており、テーブルが行モードテーブルであること。
行モードでない既存のテーブルは、グローバルテーブルの作成をサポートしていません。このようなテーブルを使用するには、テクニカルサポートに連絡してこの機能を有効にしてください。
インスタンス管理ページに移動します。
Tablestore コンソールにログインします。
ページの上部で、リソースグループとリージョンを選択します。
概要ページで、インスタンスのエイリアスをクリックするか、インスタンスの [操作] 列にある [インスタンス管理] をクリックします。
インスタンス詳細タブで、[データテーブルの作成] をクリックします。
[データテーブルの作成] ダイアログボックスで、[データテーブル名] と [プライマリキー] を設定します。
[詳細設定] スイッチをオンにし、次に [グローバルテーブルの依存関係をクイック設定] スイッチをオンにします。システムはグローバルテーブルの依存関係を自動的に構成します。
パラメーター
グローバルテーブルに必要な値
説明
データライフサイクル
-1
データは期限切れになりません。
バージョンの最大数
1
バージョンの最大数は 1 です。
行バージョニングのサポート
有効
テーブルを行モードに設定します。
説明[行バージョニングを有効にする] を有効にした後、無効にすることはできません。行バージョニングを有効にすると、次の制限が適用されます:
1 つの行には最大 256 列までしか含めることができません。
データを書き込む際にバージョン番号を手動で指定することはできません。システムが自動的に生成する必要があります。
更新操作を実行する際、システムはまず現在の行バージョンを読み取る必要があります。これにより、わずかな追加の読み取り負荷が発生します。
最大バージョンオフセット
MaxInt32 (2147483647)
バージョンオフセットを最大の Int32 値に設定します。これは制限がないことを意味します。

[作成] をクリックします。
ステップ 2:グローバルテーブルの作成
ベーステーブルをグローバルテーブルに変換し、レプリカリージョンを追加します。作成後、システムは選択されたレプリカリージョンに対応するデータテーブルを自動的に作成し、データ同期チャネルを確立します。
プライマリリージョンの [データテーブルリスト] タブで、ベーステーブルの [操作] 列にある [グローバルテーブルの作成] をクリックします。
説明データテーブル名をクリックし、[グローバルテーブル] タブに移動して [グローバルテーブル同期関係の作成] をクリックして進むこともできます。
[グローバルテーブルの作成] ダイアログボックスで、現在のリソースを構成します。
データテーブルを選択します。
[グローバル同期モード] を [プライマリセカンダリモード (クロスリージョンレプリケーション)] に設定します。

[ターゲットテーブル] エリアで、宛先インスタンスのリージョンとインスタンス名を選択します。
システムは一度に複数の宛先インスタンスの追加をサポートしています。グローバルテーブルを作成すると、システムは選択されたリージョンのインスタンスにターゲットテーブルを自動的に作成します。ターゲットテーブル名は現在のベーステーブル名と同じです。
説明宛先インスタンスにグローバルテーブルと同じ名前のデータテーブルが既に存在する場合、グローバルテーブルの作成は失敗します。
[OK] をクリックします。
[グローバルテーブルの作成] ダイアログボックスで、[リストで表示] をクリックします。[グローバルテーブル] タブでグローバルテーブルを表示できます。

ステップ 3:グローバルテーブルの検証と使用
作成後、データ同期機能を検証し、基本的な読み書きテストを実行します。
テストデータの書き込み:プライマリリージョンのデータテーブルにテストデータを書き込みます。
プライマリリージョンの [データテーブルリスト] タブで、ベーステーブルの [操作] 列にある [クエリ/検索] をクリックします。
[データ管理] タブで、[データの挿入] をクリックします。
[データの挿入] ダイアログボックスで、プライマリキーを設定し、[属性列の追加] をクリックして属性を追加し、[OK] をクリックします。
データ同期の検証:1〜3 秒待ってから、レプリカリージョンのデータをクエリして同期を検証します。
プライマリリージョンの [データテーブルリスト] タブで、ベーステーブルの [操作] 列にある [クエリ/検索] をクリックします。
ベーステーブルの [グローバルテーブル] タブで、レプリカリージョン内のレプリカテーブルの名前をクリックします。
レプリカテーブルの [データ管理] タブで、プライマリリージョンのベーステーブルから同期されたデータを表示できます。
グローバルテーブルでのデータの読み書き
グローバルテーブルのレプリカテーブルでのデータの読み書きは、標準のデータテーブルでのデータの読み取りおよびデータの書き込みと同じです。
データを読み取るには、対応するレプリカテーブルが配置されているインスタンスのエンドポイントを使用します。
プライマリセカンダリモードでは、プライマリレプリカのみがそのインスタンスのエンドポイントを介した書き込みを許可します。他のレプリカは、プライマリセカンダリのスイッチオーバー中を除き、読み取り専用です。
アクティブ-パッシブ関係の変更
プライマリセカンダリモードで、プライマリレプリカテーブルに障害が発生した場合や、アプリケーション層で書き込みリージョンを切り替える必要がある場合、別のレプリカテーブルを新しいプライマリとして設定してサービスを継続できます。
[グローバルテーブル] タブで、パッシブテーブルの [操作] 列にある [プライマリテーブルに切り替え] をクリックします。
[プライマリセカンダリ関係の変更] ダイアログボックスで、プライマリテーブルのスイッチオーバータスクを送信し、データ同期を開始します。
重要データ同期は継続します。所要時間はデータ量、システムリソース、その他の要因によって異なります。データ同期中、プライマリレプリカテーブルと新しいプライマリとして選択されたレプリカテーブルの両方が書き込み可能になります。これにより、データ不整合のリスクが生じる可能性があります。
[データ同期] ステップで、[データ同期の開始] をクリックします。

[プライマリセカンダリテーブルのスイッチオーバー] ダイアログボックスで、[詳細を表示] をクリックして、データ同期の RPO ステータスを確認します。
アプリケーション層の書き込みパスを切り替えます。
アプリケーション層の書き込みパスを切り替える前に、プライマリテーブルとパッシブテーブルのデータが一致していることを確認してください。
いずれかのテーブルの [同期モード] 列にある [書き込みパスの切り替えを確認] をクリックします。
[アプリケーション層の書き込みパスの切り替え] ステップで、データ同期が完了し、アプリケーション内のすべての書き込みエンドポイントを新しいプライマリのエンドポイントに変更したことを確認します。その後、[書き込みパス切り替え済み] をクリックします。

プライマリテーブルへの切り替えを確認します。
書き込みパスを切り替えた後、できるだけ早くプライマリテーブルの切り替えを確認してください。
重要この操作の後、元のプライマリテーブルの書き込み機能は無効になります。
いずれかのテーブルの [同期モード] 列にある [表示] をクリックします。
[プライマリテーブルへの切り替えを確認] ステップで、[同期完了、今すぐプライマリテーブルに切り替え] をクリックします。
説明プライマリセカンダリテーブルのスイッチオーバーをキャンセルするには、[プライマリテーブルの切り替えをキャンセル] をクリックし、キャンセルの確認を完了します。

確認ダイアログボックスで、[OK] をクリックします。
変更が成功すると、元のプライマリレプリカは読み取り専用になり、新しいプライマリレプリカが読み書き機能を提供します。
グローバルリージョンの追加
グローバルテーブルに 1 つ以上のグローバルリージョンを追加します。
[グローバルテーブル] タブで、レプリカテーブルの [操作] 列にある [グローバルリージョンの追加] をクリックします。
[グローバルリージョンの追加] ダイアログボックスで、宛先インスタンスのリージョンとインスタンス名を選択します。
複数のグローバルリージョンを追加するには、[インスタンスの追加] をクリックして続行します。
説明宛先インスタンスにグローバルテーブルと同じ名前のデータテーブルが既に存在する場合、グローバルリージョンの追加は失敗します。
[OK] をクリックします。
同期の削除
グローバルテーブルの同期関係を削除します。
グローバルテーブルのすべてのリージョンの同期を停止するには、各レプリカテーブルの同期関係を個別に削除する必要があります。まずパッシブテーブルを削除し、次にプライマリテーブルを削除する必要があります。特定のリージョンの同期関係を削除するには、そのリージョンのレプリカテーブルのみを削除します。
[グローバルテーブル] タブで、次のいずれかの方法を選択して同期関係の削除を開始します。
単一レプリカの削除:レプリカテーブルの [操作] 列にある [同期の削除] をクリックします。
複数レプリカの一括削除:削除するレプリカテーブルを選択し、リストの下にある [同期の削除] をクリックします。
確認ダイアログボックスで、[OK] をクリックします。
開発者向けインテグレーション
グローバルテーブルは Java SDK と共に使用できます。
本番稼働
グローバルテーブル操作に関する推奨事項
既存テーブルのグローバルテーブル作成:元の読み書き API は変更されません。データは新しいレプリカに自動的に同期されます。新しいレプリカは読み取り負荷を分担できます。
新規グローバルテーブルの作成:テーブルスキーマを決定し、ベーステーブルを作成してから、グローバルテーブルを作成します。グローバルテーブルはテーブルスキーマの変更をサポートしていません。グローバルテーブルを作成する前に、ベーステーブルがすべてのテストに合格していることを確認してください。
新しいレプリカの動的アタッチ:グローバルテーブルを使用中に、既存のレプリカの読み書き操作に影響を与えることなく、新しいレプリカを動的に追加できます。新しいレプリカは、グローバルテーブルの最新データを持ちます。
既存レプリカのデタッチ:レプリカテーブルが不要になった場合は、まずデタッチできます。デタッチ後、レプリカは他のレプリカからのデータ同期を停止しますが、テーブルとそのデータは保持されます。レプリカを削除するには、デタッチ後に手動で削除する必要があります。
適切なリージョンの組み合わせを選択:ユーザーの分布とビジネスニーズに基づいて、適切なプライマリおよびセカンダリリージョンを選択します。
プライマリリージョンのフェールオーバー:プライマリセカンダリモードで、プライマリリージョンが利用できなくなった場合、まずコンソールで新しいプライマリレプリカテーブルを選択し、次にアプリケーションの書き込みパスを切り替えます。データが新しいプライマリレプリカテーブルに同期されるのを待ってから、それをプライマリレプリカテーブルに昇格させます。スイッチオーバー中に短い書き込み中断が発生する可能性があります。ビジネス側でリトライメカニズムを実装することを推奨します。
重要データ損失を防ぐために、ビジネスアプリケーションはアプリケーションとサービスのスイッチオーバーの順序とタイミングを管理する必要があります。
割り当てと制限
詳細については、「グローバルテーブルの制限」をご参照ください。
テーブルタイプの制限:データテーブルのみがサポートされています。時系列テーブル、多次元インデックス、またはセカンダリインデックスのクロスリージョン同期はサポートされていません。
レプリカ数:単一のグローバルテーブルは最大 10 リージョンをサポートします。
同期レイテンシ:同期 RPO は通常数秒以内です。実際のレイテンシは、リージョン、ネットワーク条件、およびデータ量によって異なります。
サポートされていない機能:
リアルタイム通信 (RTC) などのデータ転送レイテンシの信頼性保証は提供されません。
グローバルテーブルは、TTL 構成の変更や事前定義列の追加など、テーブルプロパティの変更をサポートしていません。
既存のデータテーブルはデフォルトで列モードで作成され、直接グローバルテーブルにアップグレードすることはできません。
以前にグローバルテーブルの一部であったデータテーブルの同期関係を再関連付けすることはできません。このテーブルを新しいグローバルテーブルで使用するには、まず関連付けられた多次元インデックスとセカンダリインデックスを削除し、テーブル自体を削除してから、新しいグローバルテーブルを作成する必要があります。
説明このシナリオは、かつてグローバルテーブルの一部であったデータテーブルの同期が削除され、それを再度使用してグローバルテーブルを作成したい場合に適用されます。
課金
グローバルテーブルでは、データストレージ、データ読み取り、データ書き込み、およびクロスリージョンレプリケーショントラフィックに対して料金が発生します。
各レプリカテーブルのデータストレージおよび読み書き操作の課金方法は、標準のデータテーブルと同じです。詳細については、「課金の概要」をご参照ください。
料金は次のように説明されます:
データストレージ料金:各レプリカテーブルは独立してデータを保存します。各テーブルのリージョンに実際に保存されているデータ量に対して個別に課金されます。
データ読み取り料金:この料金は、すべてのレプリカテーブルでのローカル読み取り操作に対するものです。
データ書き込み料金:書き込み操作は、書き込み可能なレプリカでのみ実行できます。書き込み料金は、データが直接書き込まれるテーブルに対してのみ発生します。非同期レプリケーションを介してデータを同期するレプリカテーブルでは、書き込み料金は発生しません。
クロスリージョンレプリケーショントラフィック料金:この料金は、データが各レプリカテーブルに非同期でレプリケートされる際に生成されるクロスリージョンのデータ転送トラフィックに対して課金されます。
重要各レプリカのクロスリージョンレプリケーショントラフィック料金は個別に計算されます。料金は、データがプルされるインスタンスに請求されます。
よくある質問
TTL の設定やカスタム列の追加など、グローバルテーブルの構成を変更するにはどうすればよいですか?
グローバルテーブルの構成を直接変更することはできません。変更を行うには、まずすべてのレプリカをデタッチし、ベーステーブルを変更してから、グローバルテーブルを再作成する必要があります。グローバルテーブルを再作成する前に、アプリケーションに影響を与えないように、すべての読み書き操作をプライマリレプリカにリダイレクトしてください。その後、他のレプリカを削除します。
レプリカテーブルを削除するにはどうすればよいですか?
まず、グローバルテーブルからレプリカテーブルをデタッチします。デタッチが成功した後、コンソールのインスタンスのテーブルリストからレプリカテーブルを削除します。
プライマリセカンダリモードで、プライマリ以外のインスタンスのレプリカテーブルからデータを読み取るにはどうすればよいですか?
プライマリインスタンスで、ベーステーブルの [グローバルテーブル] タブで、関連付けられたレプリカテーブルのインスタンス名を見つけます。その後、そのインスタンスのエンドポイントを使用してデータを読み取ります。
行モードで、UpdateRow API を使用して異なるリージョンで同じ行の異なる列を順次更新した場合 (最初に 'a' を更新し、次に 'b' を更新したと仮定)、行データはどのようになりますか?
データ行は結果整合性を持ちます。最終的な値は、b が配置されているレプリカからの行全体になります。具体的なデータは、次の 2 つのケースのいずれかになります:
更新 'b' が書き込まれたときにレプリカが更新 'a' をまだ同期していなかった場合、最終的な行には更新 'b' のデータが含まれますが、更新 'a' のデータは含まれません。
更新 'b' が書き込まれたときにレプリカが更新 'a' を既に同期していた場合、最終的な行には更新 'a' と更新 'b' の両方のデータが含まれます。
異なる国のリージョン間でグローバルテーブルを作成できますか?
データコンプライアンスなどの理由により、現在、異なる国をまたぐグローバルテーブルの作成はサポートされていません。グローバルテーブルでサポートされているリージョンのリストについては、「機能とリージョンのサポートリスト」をご参照ください。



