すべてのプロダクト
Search
ドキュメントセンター

Tablestore:グローバルテーブルの作成

最終更新日:Feb 06, 2026

このトピックでは、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

CreateGlobalTableRequest のパラメーター

  • baseTable (必須) BaseTable: ベーステーブル。デフォルトでは、ベーステーブルにデータを書き込むことができます。このパラメーターには、以下のサブパラメーターが含まれます。

    名前

    タイプ

    説明

    regionId (必須)

    String

    リージョン ID。例:`cn-hangzhou`。

    instanceName (必須)

    String

    インスタンス名。

    tableName (必須)

    String

    ベーステーブルの名前。これはグローバルテーブルの名前でもあります。

  • placements (必須) List<Placement>: テーブルの配置設定のリスト。このパラメーターには、以下のサブパラメーターが含まれます。

    名前

    タイプ

    説明

    regionId (必須)

    String

    リージョン ID。例:`cn-beijing`。

    instanceName (必須)

    String

    インスタンス名。

    writable (必須)

    boolean

    テーブルが書き込み可能かどうかを指定します。デフォルト値は `false` です。プライマリセカンダリモードを使用する場合、デフォルトの構成を維持します。マルチアクティブモードを使用する場合、必要に応じてこのパラメーターを `true` に設定します。

  • syncMode (必須) SyncMode: データ同期モード。現在、ROW (行レベル同期) のみがサポートされています。

  • serveMode (オプション) ServeMode: サービスモード。有効な値:

    • PRIMARY_SECONDARY (デフォルト): プライマリセカンダリモード。プライマリリージョンは読み書き可能で、セカンダリリージョンは読み取り専用です。データはプライマリリージョンからセカンダリリージョンに同期されます。このモードは、ローカル読み取り、ディザスタリカバリとバックアップ、リモートホットスタンバイなどのシナリオに適しています。

    • PEER_TO_PEER: マルチアクティブモード。すべてのリージョンが読み書き可能です。競合は、最新のタイムスタンプを使用して勝者を決定する Last Write Wins (LWW) 原則に基づいて、行または列レベルで解決されます。このモードは、複数のリージョン間で低レイテンシの読み書きを必要とするシナリオに適しています。

プライマリセカンダリモードでのグローバルテーブルの作成

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());
}