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 |
|
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: |
|
returnColumnNames (opcional) |
Set<String> |
Colunas de contador atômico cujos valores atualizados serão retornados. Adicione nomes de colunas chamando |
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 |
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.
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.