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