Todos os produtos
Search
Central de documentação

Tablestore:Use the atomic counter feature

Última atualização: Jul 03, 2026

Use o recurso de contador atômico para incrementar ou decrementar uma coluna INTEGER em uma única operação thread-safe, sem ciclo de leitura-modificação-escrita.

Pré-requisitos

Observações de uso

  • Contadores atômicos são compatíveis apenas com colunas INTEGER.

  • Se a coluna definida como contador atômico não existir antes da gravação, seu valor padrão será 0. Caso a coluna especificada não seja do tipo INTEGER, ocorrerá um erro OTSParameterInvalid.

  • Atualize o contador com números positivos ou negativos, mas evite estouro de inteiro. Se houver estouro, o sistema retornará um erro OTSParameterInvalid.

  • Por padrão, a resposta à solicitação de atualização de linha não inclui o valor do contador atômico. Configure a resposta para retornar esse valor atualizado, se necessário.

  • Não defina uma coluna como contador atômico e a modifique na mesma solicitação de atualização. Por exemplo, ao configurar a Coluna A como contador atômico, não execute operações simultâneas de sobrescrita ou exclusão nessa coluna.

  • É possível executar várias atualizações na mesma linha via BatchWriteRow. No entanto, ao usar contadores atômicos, limite-se a uma operação de atualização por linha nessa solicitação.

  • Apenas a versão mais recente do contador atômico pode ser atualizada; versões específicas não são editáveis. Após a atualização, o sistema insere automaticamente uma nova versão dos dados no contador da linha.

Operações de API

As operações de contador atômico estão disponíveis na classe RowUpdateChange.

Operação

Descrição

RowUpdateChange Increment(Column)

Incrementa ou decrementa o valor de uma coluna INTEGER pela quantidade especificada.

List<String> ReturnColumnNames

Defina as colunas a retornar após a operação do contador atômico.

ReturnType

Especifique o tipo de retorno para o resultado do contador atômico.

Parâmetros

Parâmetro

Descrição

TableName

Nome da tabela de dados.

ColumnName

Coluna alvo da operação de contador atômico. Compatível apenas com colunas INTEGER.

Value

Quantidade a somar ou subtrair do valor da coluna. Use um número negativo para decrementar.

ReturnColumnNames

Colunas a retornar após a execução da operação.

ReturnType

Defina como ReturnType.RT_AFTER_MODIFY para obter o valor atualizado da coluna após a operação.

Exemplo

O exemplo a seguir incrementa uma coluna INTEGER e retorna o valor atualizado.

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);
}