Todos los productos
Search
Centro de documentos

Tablestore:Use the atomic counter feature

Última actualización: Sep 03, 2026

Utilice la función de contador atómico para incrementar o decrementar una columna INTEGER en una sola operación segura para hilos, sin necesidad de un ciclo de lectura-modificación-escritura.

Requisitos previos

Notas de uso

  • Los contadores atómicos solo se pueden implementar en columnas INTEGER.

  • Si una columna especificada como contador atómico no existe antes de escribir los datos, su valor predeterminado es 0. Si la columna designada como contador atómico no es de tipo INTEGER, se produce 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 este desbordamiento, se devuelve un error OTSParameterInvalid.

  • De forma predeterminada, el valor del contador atómico no se incluye en la respuesta a una solicitud de actualización de fila. No obstante, puede especificar que se devuelva el valor actualizado del contador.

  • No se permite especificar una columna como contador atómico y modificarla en la misma solicitud de actualización. Por ejemplo, si configura 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, al aplicar una operación de contador atómico, solo se admite una única operación de actualización por fila dentro de dicha solicitud.

  • Únicamente se puede modificar el valor de la versión más reciente de un contador atómico; no es posible actualizar una versión específica. Al completar la operación, se inserta automáticamente una nueva versión de datos en el contador atómico de la fila.

Operaciones de API

Las operaciones de contador atómico se exponen a través de la clase RowUpdateChange.

Operación

Descripción

RowUpdateChange Increment(Column)

Incrementa o decrementa el valor de una columna INTEGER según la cantidad especificada.

List<String> ReturnColumnNames

Define qué columnas se devolverán tras la operación del contador atómico.

ReturnType

Establece el tipo de retorno para el resultado del contador atómico.

Parámetros

Parámetro

Descripción

TableName

Nombre de la tabla de datos.

ColumnName

Columna donde se aplicará la operación de contador atómico. Solo se admiten columnas INTEGER.

Value

Cantidad que se sumará o restará al valor de la columna. Utilice un número negativo para decrementar.

ReturnColumnNames

Columnas que se incluirán en la respuesta después de la operación.

ReturnType

Establezca este parámetro en ReturnType.RT_AFTER_MODIFY para obtener el valor actualizado de la columna tras la operación.

Ejemplo

El siguiente ejemplo incrementa una columna INTEGER y devuelve el valor actualizado.

public static void Increment(int incrementValue)
{
    Console.WriteLine("Start set increment column...");
    OTSClient otsClient = Config.GetClient();

    // Specify the primary key of the row. The primary key must be consistent with the primary key specified in TableMeta when you create the table. 
    PrimaryKey primaryKey = new PrimaryKey
    {
        { Pk1, new ColumnValue(0) },
        { Pk2, new ColumnValue("abc") }
    };
    RowUpdateChange rowUpdateChange = new RowUpdateChange(TableName, primaryKey); // Specify the name of the data table. 
    // Set the ReturnType parameter to ReturnType.RT_AFTER_MODIFY to return the values of the column on which atomic counter operations are performed. 
    rowUpdateChange.ReturnType = ReturnType.RT_AFTER_MODIFY;
    rowUpdateChange.ReturnColumnNames = new List<string>() { IncrementCol};
    // Specify the column on which atomic counter operations are performed. The column value starts from 0 and increases by the number specified by the incrementValue parameter. 
    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);
}