前提條件
注意事項
只支援對整型列的列值進行原子計數操作。
作為原子計數器的列,如果寫入資料前該列不存在,則預設值為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);
}