プライマリキー列の自動インクリメント機能は、Table Store によって開始された新しい機能であり、Java SDK v4.2.0 以降のバージョンで使用可能です。

プライマリキー列の自動インクリメント機能は、プライマリキー列を自動インクリメント列として指定した場合、データを書き込むときに Table Store がこの列に新しい値を自動的に生成し、生成された値が同じパーティションキー下の列の最大値になることを意味します。この機能は主に、e コマース Web サイトのアイテム ID、大規模 Web サイトのユーザー ID、フォーラムの投稿 ID、チャットツールのメッセージ IDなど、プライマリキー列に自動インクリメント機能を適用する必要があるシステム設計シナリオに適用されます。

機能の特徴

  • Table Store は現在複数のプライマリキーをサポートしていますが、最初のプライマリキーはパーティションキーです。これに対して、プライマリキーの自動増分は許可されていません。

  • パーティションキーを除いて、他のどのプライマリキーも自動増分列に設定できます。

  • 自動インクリメントはパーティションキーに基づいて生成されるため、プライマリキー列の自動インクリメント機能はパーティションキーレベルです。

  • 現時点では、各テーブルの自動インクリメント列に設定できるプライマリキー列は 1 つだけです。

  • 自動生成された自動インクリメント列は、64 ビット符号付き長整数型です。

インターフェイス

プライマリキー列の自動インクリメント機能には、主に 2 種類のインターフェースが含まれます。テーブルの作成とデータの書き込みです。

  • テーブルを作成する

    テーブルを作成するときは、自動インクリメントのプライマリキーの属性を PrimaryKeyOption.AUTO_INCREMENT に設定するだけです。

    関連インターフェイス: CreateTable

    private static void createTable(SyncClient client) {
            TableMeta tableMeta = new TableMeta(“table_name”);
    
            // 最初の列はパーティションキーです。
            tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("PK_1", PrimaryKeyType.STRING));
    
            // 2番目の列は INTEGER型 の自動インクリメント列で、属性は AUTO_INCREMENT です。
            tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("PK_2", PrimaryKeyType.INTEGER, PrimaryKeyOption.AUTO_INCREMENT));
    
            int timeToLive = -1;  // 期限切れになりません。
            int maxVersions = 1;  // 保存されるバージョンは 1 つだけです。
    
            TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
    
            CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
    
            client.createTable(request);
        }
    					
    • 最初のプライマリキーはパーティションキーであり、自動インクリメント列として設定することはできません。

    • 自動増分列として設定できるのは INTEGER 列のみです。

    • 各テーブルに許可されるプライマリキー自動増分列は 1 つだけです。

  • データを書き込み

    データを書き込むときは、自動インクリメント列の値をプレースホルダ PrimaryKeyValue.AUTO_INCREMENT として設定するだけです。

    データが Table Store に書き込まれた後にプライマリキー値を自動的に生成する場合は、 RT_PK に ReturnType を設定し、データが正常に書き込まれたときにプライマリキー値を返すようにできます。

    関連インターフェイス: PutRow / UpdateRow / BatchWriteRow

        private static void putRow(SyncClient client, String receive_id) {
            // プライマリキーを作成します
            PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    
            // 最初の列の値は md5 の最初の 4 桁です (receive_id)
            primaryKeyBuilder.addPrimaryKeyColumn(“PK_1”, PrimaryKeyValue.fromString("Hangzhou");
    
    
            // 3 列目は主キーの自動インクリメント列です。 この値は Table Store によって生成されます。 自動インクリメント列の値をプレースホルダ AUTO_INCREMENT として設定します。 ここに真の値を入力する必要はありません。
            primaryKeyBuilder.addPrimaryKeyColumn("PK_2", PrimaryKeyValue.AUTO_INCREMENT);
            PrimaryKey primaryKey = primaryKeyBuilder.build();
    
            RowPutChange rowPutChange = new RowPutChange("table_name", primaryKey);
    
            // ここで戻り型は RT_PK に設定され、返された結果に PK 列の値が含まれることを示します。 ReturnType が設定されていない場合、デフォルトでは結果が返されません。
            rowPutChange.setReturnType(ReturnType.RT_PK);
    
            // 属性列とメッセージの内容を追加します。
            rowPutChange.addColumn(new Column("content", ColumnValue.fromString(content)));
    
            // Table Store にデータを書き込みます。
            PutRowResponse response = client.putRow(new PutRowRequest(rowPutChange));
    
            // 返された PK 列を印字します
            Row returnRow = response.getRow();
            if (returnRow ! = null) {
                System.out.println("PrimaryKey:" + returnRow.getPrimaryKey().toString());
            }
    
            // 消費された CU を印字します。
            CapacityUnit  cu = response.getConsumedCapacity().getCapacityUnit();
            System.out.println("Read CapacityUnit:" + cu.getReadCapacityUnit());
            System.out.println("Write CapacityUnit:" + cu.getWriteCapacityUnit());
        }