前提条件
已初始化Client,具体操作,请参见初始化Tablestore Client。
注意事项
只支持对整型列的列值进行原子计数操作。
作为原子计数器的列,如果写入数据前该列不存在,则默认值为0;如果写入数据前该列已存在且列值非整型,则产生OTSParameterInvalid错误。
增量值可以是正数或负数,但不能出现计算溢出。如果出现计算溢出,则产生OTSParameterInvalid错误。
默认不返回进行原子计数操作的列值,您可以通过相应操作指定返回进行原子计数操作的列值。
在单次更新请求中,不能对某一列同时进行更新和原子计数操作。假设列A已经执行原子计数操作,则列A不能再执行其他操作(例如列的覆盖写,列删除等)。
在一次BatchWriteRow请求中,支持对同一行数据进行多次更新操作。但是如果某一行已进行原子计数操作,则该行在此批量请求中只能出现一次。
原子计数操作只能作用在列值的最新版本,不支持对列值的特定版本做原子计数操作。更新完成后,原子计数操作会插入一个新的数据版本。
接口
原子计数器操作通过 RowUpdateChange 类提供,接口说明如下。
|
接口 |
说明 |
|
RowUpdateChange Increment(Column column) |
对整型列执行增量变更,例如 +X、-X。 |
|
List<String> ReturnColumnNames |
指定原子计数操作完成后需要返回值的列名。 |
|
ReturnType ReturnType |
指定原子计数操作的返回类型。 |
参数
|
参数 |
说明 |
|
TableName |
数据表名称。 |
|
ColumnName |
执行原子计数操作的列名。仅支持整型列。 |
|
Value |
列值的增量,可为正数(递增)或负数(递减)。 |
|
ReturnColumnNames |
指定操作完成后需要返回值的列名。 |
|
ReturnType |
设置为 |
示例
以下示例对整型列执行原子计数操作,并返回更新后的值。
public static void Increment(int incrementValue)
{
Console.WriteLine("Start set increment column...");
OTSClient otsClient = Config.GetClient();
//定义行的主键,必须与创建表时TableMeta中定义的一致。
PrimaryKey primaryKey = new PrimaryKey
{
{ Pk1, new ColumnValue(0) },
{ Pk2, new ColumnValue("abc") }
};
RowUpdateChange rowUpdateChange = new RowUpdateChange(TableName, primaryKey); //设置数据表名称。
//设置ReturnType为ReturnType.RT_AFTER_MODIFY,将进行原子计数操作的列值返回。
rowUpdateChange.ReturnType = ReturnType.RT_AFTER_MODIFY;
rowUpdateChange.ReturnColumnNames = new List<string>() { IncrementCol};
//设置进行原子计数操作的列,该列从0开始自增,每次增加incrementValue。
rowUpdateChange.Increment(new Column(IncrementCol, new ColumnValue(incrementValue)));
UpdateRowRequest updateRowRequest = new UpdateRowRequest(rowUpdateChange);
var response = otsClient.UpdateRow(updateRowRequest);
Console.WriteLine("set Increment column succeed Increment result:" + response.Row.GetColumns()[0].Value);
}