如果要在某些在線應用中快速進行計數操作,您可以使用原子計數器實現。使用原子計數器時,您需要將表中的某一列當成一個原子計數器,然后對該列進行原子計數操作。
前提條件
已初始化Client,詳情請參見初始化Client。
已創建數據表并寫入數據。
注意事項
只支持對整型列的列值進行原子計數操作。
作為原子計數器的列,如果寫入數據前該列不存在,則默認值為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));
});