このトピックでは、Tablestore Java SDK を使用してグローバルテーブルを作成する方法について説明します。
注意事項
作成操作が成功すると、システムは非同期でデータを同期します。DescribeGlobalTable を呼び出して、グローバルテーブルの現在のステータスを確認できます。グローバルテーブルのステータスが「アクティブ」に変わると、作成されたと見なされます。
前提条件
ソースリージョンとターゲットリージョンにインスタンスを作成する必要があります。
ソースリージョンにデータテーブルを作成します。テーブルには次の構成が必要です:生存時間 (TTL) が -1 (データは期限切れにならない) に設定され、バージョンの最大数が 1 に設定され、バージョンドリフトの最大値が無制限 (`Integer.MAX_VALUE`) に設定され、行バージョン管理が有効 (`updateFullRow` が `True`) になっている必要があります。
重要行バージョン管理を有効にすると、次の制限が適用されます:
1 行に含めることができる列は最大 256 列です。
データを書き込む際に、バージョン番号を手動で指定することはできません。システムが自動的に生成します。
`Update` 操作を実行すると、システムはまず現在の行バージョンを読み取ります。このアクションにより、読み取り負荷がわずかに増加します。
- 重要
Resource Access Management (RAM) ユーザーの AccessKey を使用してクライアントを初期化する場合、その RAM ユーザーがグローバルテーブルを作成する権限を持っていることを確認する必要があります。必要な Action 定義の詳細については、「Tablestore API 操作」をご参照ください。
メソッドの説明
public CreateGlobalTableResponse createGlobalTable(CreateGlobalTableRequest createGlobalTableRequest) throws TableStoreException, ClientException例
プライマリセカンダリモードでのグローバルテーブルの作成
private static void createGlobalTableExample(SyncClient client){
// リクエストを構築します。
CreateGlobalTableRequest req = new CreateGlobalTableRequest(
// ベーステーブルを設定します。テーブルはすでに存在している必要があります。
new GlobalTableTypes.BaseTable(
// ベーステーブルのリージョン ID。
"cn-hangzhou",
// ベーステーブルのインスタンス名。
"i-gt-test",
// ベーステーブルの名前。これはグローバルテーブルの名前でもあります。
"t-gt-test-1"
),
// グローバルテーブルの同期モード。現在、ROW モード (行レベル同期) のみがサポートされています。
GlobalTableTypes.SyncMode.ROW
);
// 関連テーブルを追加します。複数のテーブルを追加できます。
req.addPlacement(new GlobalTableTypes.Placement(
// 関連テーブルのリージョン ID。
"cn-shanghai",
// 関連テーブルのインスタンス名。インスタンスはすでに存在している必要があります。
// インスタンスには、ベーステーブルと同じ名前のテーブルを含めることはできません。システムが自動的にテーブルを作成します。
"i-dest-test",
// テーブルが書き込み可能かどうかを指定します。false は読み取り専用を示します。プライマリセカンダリモードでは、これは false にのみ設定できます。
false
));
// サービスモードをプライマリ/セカンダリモード (PRIMARY_SECONDARY) に設定します。
req.setServeMode(GlobalTableTypes.ServeMode.PRIMARY_SECONDARY);
// リクエストを送信します。
CreateGlobalTableResponse createResp = client.createGlobalTable(req);
// 応答を出力します。
System.out.println("グローバルテーブルの作成が開始されました。");
System.out.println("RequestId: " + createResp.getRequestId());
System.out.println("GlobalTableId: " + createResp.getGlobalTableId());
}マルチアクティブモードでのグローバルテーブルの作成
private static void createGlobalTableExample(SyncClient client){
// リクエストを作成します。
CreateGlobalTableRequest req = new CreateGlobalTableRequest(
// ベーステーブルを構成します。テーブルはすでに存在している必要があります。
new GlobalTableTypes.BaseTable(
// ベーステーブルのリージョン ID。
"cn-hangzhou",
// ベーステーブルのインスタンス名。
"i-gt-test",
// ベーステーブルの名前。これはグローバルテーブルの名前でもあります。
"t-gt-test-1"
),
// グローバルテーブルの同期モード。現在、ROW モード (行レベルの同期) のみがサポートされています。
GlobalTableTypes.SyncMode.ROW
);
// 関連テーブルを追加します。複数のテーブルを追加できます。
req.addPlacement(new GlobalTableTypes.Placement(
// 関連テーブルのリージョン ID。
"cn-shanghai",
// 関連テーブルのインスタンス名。インスタンスはすでに存在している必要があります。
// インスタンスにベーステーブルと同じ名前のテーブルを含めることはできません。システムが自動的にテーブルを作成します。
"i-dest-test",
// テーブルが書き込み可能かどうかを指定します。マルチアクティブモードでは、必要に応じて true または false に設定できます。
true
));
// サービスモードをマルチアクティブ (PEER_TO_PEER) に設定します。
req.setServeMode(GlobalTableTypes.ServeMode.PEER_TO_PEER);
// リクエストを送信します。
CreateGlobalTableResponse createResp = client.createGlobalTable(req);
// 応答を出力します。
System.out.println("グローバルテーブルの作成が開始されました。");
System.out.println("RequestId: " + createResp.getRequestId());
System.out.println("GlobalTableId: " + createResp.getGlobalTableId());
}