Todos os produtos
Search
Central de documentação

Tablestore:Use atomic counters

Última atualização: Aug 20, 2026

O Tablestore SDK for Java incrementa ou decrementa atomicamente uma coluna de atributo inteira no nível da linha e pode retornar o valor atualizado na mesma solicitação.

Pré-requisitos

Instale o Tablestore SDK for Java e inicialize o cliente.

Descrição

Chame increment(Column) para atualizar atomicamente a coluna inteira especificada. Valores positivos incrementam o valor; valores negativos o decrementam. O Tablestore garante atomicidade no nível da linha e grava uma nova versão dos dados após a atualização. Para retornar o valor atualizado na mesma solicitação, chame addReturnColumn(String) e defina returnType como RT_AFTER_MODIFY.

public UpdateRowResponse updateRow(UpdateRowRequest updateRowRequest) throws TableStoreException, ClientException
public RowUpdateChange increment(Column column)
public void addReturnColumn(String columnName)
public void setReturnType(ReturnType returnType)

O exemplo a seguir incrementa em 10 a coluna price da linha com chave primária pk0 na tabela counter_demo e lê o valor atualizado na mesma solicitação.

PrimaryKey primaryKey = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("pk0"))
        .build();

RowUpdateChange rowUpdateChange = new RowUpdateChange("counter_demo", primaryKey);

// Increment the price column by 10 (use a negative value to decrement)
rowUpdateChange.increment(new Column("price", ColumnValue.fromLong(10)));

// Return the updated column value in the same request
rowUpdateChange.addReturnColumn("price");
rowUpdateChange.setReturnType(ReturnType.RT_AFTER_MODIFY);

UpdateRowResponse response = client.updateRow(new UpdateRowRequest(rowUpdateChange));
Row row = response.getRow();
System.out.println("Updated price: " + row.getLatestColumn("price").getValue().asLong());

Parâmetros

Configuração da solicitação

UpdateRowRequest contém os seguintes parâmetros:

Nome

Tipo

Descrição

rowChange (obrigatório)

RowUpdateChange

Configuração de atualização de linha única.

transactionId (opcional)

String

ID da transação local. Especifique este parâmetro apenas ao executar a operação de contador atômico em uma transação local.

Para obter informações sobre como obter e usar o ID, consulte Use local transactions.

Configuração de atualização de linha

O parâmetro rowChange de UpdateRowRequest é do tipo RowUpdateChange.

Nome

Tipo

Descrição

tableName (obrigatório)

String

Nome da tabela de dados.

primaryKey (obrigatório)

PrimaryKey

Chave primária da linha de destino.

columnsToUpdate (obrigatório)

List<Pair<Column, Type>>

Colunas de atributo a atualizar. Chame increment(Column) para adicionar uma operação de contador atômico.

condition (opcional)

Condition

Configuração de atualização condicional. A operação de contador atômico ocorre somente se a linha atender à condição.

Para obter informações sobre como configurar a condição, consulte Use conditional updates.

returnType (opcional)

ReturnType

Tipo de retorno. Valor padrão: RT_NONE. Para retornar o valor atualizado, defina este parâmetro como RT_AFTER_MODIFY.

returnColumnNames (opcional)

Set<String>

Colunas de contador atômico cujos valores atualizados serão retornados. Adicione nomes de colunas chamando addReturnColumn() e use este parâmetro em conjunto com RT_AFTER_MODIFY.

Coluna de contador

Cada elemento adicionado a UpdateRowRequest.rowChange.columnsToUpdate por increment() contém um objeto Column.

Nome

Tipo

Descrição

name (obrigatório)

String

Nome da coluna de atributo na qual executar a operação de contador atômico.

value (obrigatório)

ColumnValue

Incremento inteiro. Valores positivos incrementam; valores negativos decrementam. O resultado não deve causar estouro. Se a coluna de destino não existir, seu valor inicial será tratado como 0.

Resposta

Nome

Tipo

Descrição

row

Row

Se RT_AFTER_MODIFY for especificado, este campo conterá os valores atualizados das colunas de contador atômico adicionadas por addReturnColumn(). Chame getRow() para obter o valor.

Limitações

  • Operações de contador atômico aceitam apenas colunas inteiras. Se a coluna existir mas não for do tipo inteiro, a operação retornará o erro OTSParameterInvalid.

  • Essas operações aplicam-se exclusivamente à versão mais recente e não aceitam carimbo de data/hora definido pelo usuário.

  • Não é possível combinar uma operação de contador atômico com outras operações na mesma coluna (como sobrescrita ou exclusão) em uma única solicitação de atualização.

  • Em uma solicitação BatchWriteRow, cada linha com operação de contador atômico pode aparecer apenas uma vez.

Importante

Operações de contador atômico podem falhar devido a tempos limite de rede ou erros do sistema. Uma nova tentativa pode aplicar o incremento duas vezes, resultando em um contador maior (ou menor) que o esperado. Para evitar contagem dupla, use conditional update para atualizar o valor com base em seu estado atual.