将列当成一个原子计数器使用,对该列进行原子计数操作,可用于为某些在线应用提供实时统计功能,例如统计帖子的PV(实时浏览量)等。
前提条件
- 已初始化Client,详情请参见初始化OTSClient。
- 已创建数据表并写入数据。
限制
- 只支持对整型列的列值进行原子计数操作。
- 作为原子计数器的列,如果写入数据前该列不存在,则默认值为0;如果写入数据前该列已存在且列值非整型,则产生OTSParameterInvalid错误。
- 增量值可以是正数或负数,但不能出现计算溢出。如果出现计算溢出,则产生OTSParameterInvalid错误。
- 默认不返回进行原子计数操作的列值,可以通过相应操作指定返回进行原子计数操作的列值。
- 在单次更新请求中,不能对某一列同时进行更新和原子计数操作。假设列A已经执行原子计数操作,则列A不能再执行其他操作(例如列的覆盖写,列删除等)。
- 在一次BatchWriteRow请求中,支持对同一行进行多次更新操作。但是如果某一行已进行原子计数操作,则该行在此批量请求中只能出现一次。
- 原子计数操作只能作用在列值的最新版本,不支持对列值的特定版本做原子计数操作。更新完成后,原子计数操作会插入一个新的数据版本。
接口
/**
* 更新一行数据。
* @api
* @param [] $request 请求参数。
* @return [] 请求返回。
* @throws OTSClientException 当参数检查出错或服务端返回校验出错时抛出异常。
* @throws OTSServerException 当OTS服务端返回错误时抛出异常。
*/
public function updateRow(array $request);
updateRow接口中新增了原子计数器的操作接口,操作说明请参见下表。
操作 | 说明 |
update_of_attribute_columns | 更新类型为INCREMENT,对列执行增量变更,例如+X,-X等。配置格式如下:
|
return_content | 返回进行增量变更后的列值。您需要设置进行增量变更的列名以及设置返回类型为
|
参数
参数 | 说明 |
table_name | 数据表名称。 |
column_name | 进行原子计数操作的列名。只支持对整型列的列值进行原子计数器操作。 |
value | 对列进行增量变更的值。 |
return_content | 返回进行原子计数操作的列信息。包含return_type和return_column_names配置。
|
示例
以下示例用于在写入数据时对整型列做列值的增量变更,然后读取更新后的新值。
$request = array (
//设置数据表名称。
'table_name' => 'MyTable',
//设置行存在性条件为RowExistenceExpectationConst::CONST_IGNORE,表示忽略行是否存在,不做任何行存在性检查。
'condition' => RowExistenceExpectationConst::CONST_IGNORE,
//设置主键值。设置的主键个数和类型必须与数据表的主键个数和类型一致。
'primary_key' => array (
//第一列主键名为PK0,类型为整型,列值为123。
array('PK0', 123),
//第二列主键名为PK1,类型为字符串,列值为'inc'。
array('PK1', 'inc')
),
//更新的属性列。支持设置PUT、DELETE和DELETE_ALL三种操作类型。
'update_of_attribute_columns'=> array(
'INCREMENT' => array (
//设置进行原子操作的列名为attr0以及设置对列进行增量变更的值为1.其中attr0列的数据类型为整型。
array('attr0', 1, ColumnTypeConst::CONST_INTEGER),
),
'PUT' => array(
array('attr1', 1, ColumnTypeConst::CONST_INTEGER),
)
),
//返回进行原子操作后的列信息。
'return_content' => array(
'return_type' => ReturnTypeConst::CONST_AFTER_MODIFY,
'return_column_names' => array('attr0')
)
);
$response = $otsClient->updateRow ($request);
print json_encode ($response);