Todos os produtos
Search
Central de documentação

Tablestore:Usar o recurso de contador atômico

Última atualização: Jun 23, 2026

Quando várias solicitações modificam o mesmo contador simultaneamente, padrões de leitura-incremento-gravação produzem resultados incorretos. Um contador atômico resolve esse problema ao incrementar ou decrementar o valor de uma coluna em uma única operação isolada no servidor. Use-o para contadores de gravação simultânea em que a precisão é importante — por exemplo, para rastrear visualizações de página, contagem de votos ou quantidades de inventário.

null

O Tablestore SDK para Python V5.1.0 ou posterior oferece suporte ao recurso de contador atômico.

Pré-requisitos

Notas de uso

  • Os contadores atômicos só podem ser implementados em colunas do tipo INTEGER.

  • Se uma coluna especificada como contador atômico não existir antes da gravação dos dados, o valor padrão da coluna será 0. Se a coluna especificada como contador atômico não for do tipo INTEGER, o erro OTSParameterInvalid será retornado.

  • Você pode atualizar um contador atômico com um número positivo ou negativo, mas deve evitar estouro de inteiro. Se ocorrer um estouro de inteiro, o erro OTSParameterInvalid será retornado.

  • Por padrão, o valor de um contador atômico não é retornado na resposta a uma solicitação de atualização de linha. Você pode especificar que o valor atualizado do contador atômico seja retornado.

  • Não é possível especificar uma coluna como contador atômico e atualizar essa coluna em uma única solicitação de atualização. Por exemplo, se você definir a Coluna A como contador atômico, não poderá executar outras operações, como substituição e exclusão, na mesma coluna simultaneamente.

  • Você pode executar várias operações de atualização na mesma linha enviando uma solicitação BatchWriteRow. No entanto, ao executar uma operação de contador atômico em uma linha, apenas uma operação de atualização pode ser realizada na linha em uma solicitação BatchWriteRow.

  • Somente o valor da versão mais recente de um contador atômico pode ser atualizado. Não é possível atualizar o valor de uma versão específica de um contador atômico. Após a conclusão da operação de atualização, uma nova versão de dados é inserida no contador atômico da linha.

Quando usar

Um contador atômico é adequado quando uma leve contagem a mais ou a menos é aceitável. Por exemplo, você pode rastrear visualizações de página e incrementar o contador a cada visita. Se uma nova tentativa incrementar o contador duas vezes, a pequena discrepância é tolerável.

Um contador atômico não é adequado quando cada contagem precisa ser exata — por exemplo, em livros contábeis ou transações bancárias. Nesses casos, use uma atualização condicional. Atualizações condicionais verificam o valor atual antes de aplicar uma alteração, garantindo a correção ao custo de menor throughput sob contenção.

Casos de uso comuns:

  • Contadores de visualização de página e estatísticas de visitantes

  • Contagem de votos e curtidas

  • Quantidades de inventário em que a precisão exata não é crítica

O contador atômico é exposto por meio da operação updateRow como o seguinte tipo de atualização:

Operação

Descrição

INCREMENT

Aumenta ou diminui o valor de uma coluna INTEGER em um valor especificado. Se a coluna não existir, INCREMENT a cria e define seu valor como o delta.

Como funciona

O Tablestore aplica o delta atomicamente no servidor, de modo que solicitações simultâneas produzem resultados cumulativos corretos sem a condição de corrida de leitura-verificação-gravação.

Cada chamada updateRow com INCREMENT não é idempotente: repetir a mesma solicitação incrementa o contador novamente. Um delta positivo causa contagem a mais; um delta negativo causa contagem a menos. Se o aplicativo executar novas tentativas de solicitações com falha, use uma atualização condicional com verificação de versão para ignorar incrementos duplicados.

A tabela a seguir descreve os parâmetros:

Parâmetro

Descrição

table_name

O nome da tabela de dados.

column_name

O nome da coluna a ser incrementada ou decrementada. A coluna deve ser do tipo INTEGER. Se a coluna não existir, INCREMENT a cria com o delta como valor inicial.

value

O valor a ser adicionado ou subtraído. Use um inteiro positivo para incrementar e um inteiro negativo para decrementar.

Exemplos

O exemplo a seguir incrementa a coluna price em 6:

Antes da atualização: A linha possui price definido como 10.

Após a atualização: A coluna price passa a ser 16.

def increment_by_update_row(client):
    # Specify the name of the data table.
    table_name = '<TABLE_NAME>'
    primary_key = [('pk0', 1)]
    # Use INCREMENT to increase the price column by 6.
    update_of_attribute_columns = {
        'INCREMENT': [('price', 6)]
    }
    row = Row(primary_key, update_of_attribute_columns)
    consumed, return_row = client.update_row(table_name, row, None)
    print('Update succeeded, consumed %s write capacity units.' % consumed.write)