全部產品
Search
文件中心

Tablestore:原子計數器

更新時間:Jul 06, 2024

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

前提條件

注意事項

  • 只支援對整型列的列值進行原子計數操作。

  • 作為原子計數器的列,如果寫入資料前該列不存在,則預設值為0;如果寫入資料前該列已存在且列值非整型,則產生OTSParameterInvalid錯誤。

  • 增量值可以是正數或負數,但不能出現計算溢出。如果出現計算溢出,則產生OTSParameterInvalid錯誤。

  • 預設不返回進行原子計數操作的列值,您可以通過相應操作指定返回進行原子計數操作的列值。

  • 在單次更新要求中,不能對某一列同時進行更新和原子計數操作。假設列A已經執行原子計數操作,則列A不能再執行其他動作(例如列的覆蓋寫,列刪除等)。

  • 在一次BatchWriteRow請求中,支援對同一行資料進行多次更新操作。但是如果某一行已進行原子計數操作,則該行在此批量請求中只能出現一次。

  • 原子計數操作只能作用在列值的最新版本,不支援對列值的特定版本做原子計數操作。更新完成後,原子計數操作會插入一個新的資料版本。

介面

updateRow介面新增了原子計數器的相關操作,操作說明請參見下表。

操作

說明

updateOfAttributeColumns

更新類型為INCREMENT,對列執行增量變更,例如+X,-X等。

returnContent

對於進行原子計數操作的列,設定列名和傳回型別,返回進行原子計數操作的列的新值。

參數

參數

說明

tableName

資料表名稱。

columnName

進行原子計數操作的列名。只支援對整型列的列值進行原子計數操作。

value

對列進行增量變更的值。

returnColumns

對於進行原子計數操作的列,設定需要返回列值的列名。

returnType

設定傳回型別為TableStore.ReturnType.AfterModify,將進行原子計數操作的列值返回。

樣本

以下樣本用於在寫入資料時,使用updateRow介面對整型列做列值的增量變更,屬性列中對應類型為INCREMENT。

var params = {
  tableName: "<Your-Table-Name>",
  condition: new TableStore.Condition(TableStore.RowExistenceExpectation.EXPECT_EXIST, null),
  primaryKey: [{'pk0': Long.fromNumber(1)}],
  //將進行原子計數操作的price列的列值+10,不能設定時間戳記。
  updateOfAttributeColumns: [
    {'INCREMENT': [{'price': Long.fromNumber(10)}]}
  ],
  //設定ReturnType為TableStore.ReturnType.AfterModify,將進行原子計數操作的列值返回。
  returnContent: {
    returnColumns: ["price"],
    returnType: TableStore.ReturnType.AfterModify
  }
};

client.updateRow(params,
  function (err, data) {
    if (err) {
      console.log('error:', err);
      return;
    }

    console.log('success:', JSON.stringify(data, null, 2));
  });