Si necesita utilizar un contador en su aplicación en línea, puede emplear la función de contador atómico. Para usar esta función, especifique una columna como contador atómico y ejecute operaciones de contador atómico sobre dicha columna.
Requisitos previos
Se inicializó una instancia de OTSClient. Para obtener más información, consulte Initialize an OTSClient instance.
Se creó una tabla de datos y se escribieron datos en ella. Para obtener más información, consulte Create a data table y Write data.
Notas de uso
Los contadores atómicos solo se pueden implementar en columnas de tipo INTEGER.
Si una columna especificada como contador atómico no existe antes de escribir los datos, su valor predeterminado será 0. Si la columna designada como contador atómico no es de tipo INTEGER, se producirá un error OTSParameterInvalid.
Es posible actualizar un contador atómico mediante un número positivo o negativo, pero debe evitarse el desbordamiento de enteros. Si ocurre un desbordamiento de este tipo, se devolverá un error OTSParameterInvalid.
De forma predeterminada, el valor de un contador atómico no se incluye en la respuesta a una solicitud de actualización de fila. No obstante, puede configurar que se devuelva el valor actualizado del contador atómico.
No es posible especificar una columna como contador atómico y actualizarla en la misma solicitud de actualización. Por ejemplo, si establece la Columna A como contador atómico, no podrá ejecutar simultáneamente otras operaciones sobre ella, como sobrescritura o eliminación.
Mediante una solicitud BatchWriteRow se pueden realizar varias operaciones de actualización en la misma fila. Sin embargo, si ejecuta una operación de contador atómico sobre una fila, solo podrá llevar a cabo una operación de actualización para esa fila dentro de la solicitud BatchWriteRow.
Únicamente se puede actualizar el valor de la versión más reciente de un contador atómico; no es posible modificar el valor de una versión específica. Una vez completada la operación de actualización, se inserta una nueva versión de datos en el contador atómico de la fila.
Operaciones de API
La operación relacionada con el contador atómico se agregó a la operación updateRow. En la siguiente tabla se describe dicha operación.
|
Operación |
Descripción |
|
updateOfAttributeColumns |
Especifica INCREMENT como tipo de actualización para aumentar o disminuir el valor de una columna en un entero específico. |
|
returnContent |
Especifica el nombre de la columna cuyo valor desea obtener de entre aquellas en las que se ejecutan operaciones para implementar el contador atómico. |
Parámetro
|
Parámetro |
Descripción |
|
tableName |
Nombre de la tabla de datos. |
|
columnName |
Nombre de la columna sobre la cual se ejecutarán operaciones de contador atómico. Los contadores atómicos solo se pueden implementar en columnas de tipo INTEGER. |
|
value |
Incremento o decremento del valor de la columna. |
|
returnColumns |
Especifica el nombre de la columna cuyo valor desea obtener de entre aquellas en las que se ejecutan operaciones para implementar el contador atómico. |
|
returnType |
Establece el tipo de retorno en TableStore.ReturnType.AfterModify para devolver los valores de las columnas sobre las que se ejecutan operaciones de contador atómico. |
Ejemplo
El siguiente fragmento de código muestra cómo usar INCREMENT como tipo de actualización para modificar el valor de una columna de atributos de tipo INTEGER al invocar la operación updateRow:
var params = {
tableName: "<Your-Table-Name>",
condition: new TableStore.Condition(TableStore.RowExistenceExpectation.EXPECT_EXIST, null),
primaryKey: [{'pk0': Long.fromNumber(1)}],
// Specify the price column as an atomic counter and increase the value of the atomic counter by 10. You cannot specify the timestamp.
updateOfAttributeColumns: [
{'INCREMENT': [{'price': Long.fromNumber(10)}]}
],
// Set the return type to TableStore.ReturnType.AfterModify and return the values of the columns on which operations are performed to implement atomic counter.
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));
});