C++ SDK支援主鍵列自增。如果您設定某一列主鍵為自增列,在寫入一行資料時,這一列主鍵不用填值,Table Store會自動為您產生這一列主鍵的值,這個值在分區鍵上保證唯一,且嚴格遞增。詳細資料請參見主鍵列自增

建立表

注意 自增主鍵列必須是整型,並且需要設定 PrimaryKeyColumnSchema::AutoIncrement
CreateTableRequest req;
{
    // immutable configurations of the table
    TableMeta& meta = req.mutableMeta();
    meta.mutableTableName() = kTableName;
    Schema& schema = meta.mutableSchema();
    {
        PrimaryKeyColumnSchema& pkColSchema = schema.append();
        pkColSchema.mutableName() = "ShardKey";
        pkColSchema.mutableType() = kPKT_String;
    }
    {
        PrimaryKeyColumnSchema& pkColSchema = schema.append();
        pkColSchema.mutableName() = "AutoIncrKey";
        pkColSchema.mutableType() = kPKT_Integer;
        pkColSchema.mutableOption().reset(PrimaryKeyColumnSchema::AutoIncrement);
    }
}
CreateTableResponse resp;
Optional<OTSError> res = client.createTable(resp, req);

寫入資料

自增主鍵列的值由Table Store的服務端填入,因此,寫入時主鍵列必須填入一個特殊的預留位置,可以由PrimaryKeyValue::toAutoIncrement()取得該預留位置對象。如果您想要讀取這行資料,可以設定傳回值包含主鍵,服務端會將主鍵中的自增主鍵列的預留位置替換成實際的列值,然後返回,您可以記錄下該主鍵用於後續使用。

本樣本以單行覆寫為例,其他寫入介面類似。

PutRowRequest req;
{
    RowPutChange& chg = req.mutableRowChange();
    chg.mutableTable() = kTableName;
    chg.mutableReturnType() = RowChange::kRT_PrimaryKey;
    PrimaryKey& pkey = chg.mutablePrimaryKey();
    pkey.append() = PrimaryKeyColumn(
        "ShardKey",
        PrimaryKeyValue::toStr("shard0"));
    pkey.append() = PrimaryKeyColumn(
        "AutoIncrKey",
        PrimaryKeyValue::toAutoIncrement());
}