全部產品
Search
文件中心

Tablestore:原子計數器

更新時間:May 01, 2026

如果要在某些線上應用中快速進行計數操作,您可以使用原子計數器實現。使用原子計數器時,您需要將表中的某一列當成一個原子計數器,然後對該列進行原子計數操作。

前提條件

初始化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

設定為 ReturnType.RT_AFTER_MODIFY,返回操作後的列最新值。

樣本

以下樣本對整型列執行原子計數操作,並返回更新後的值。

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