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
Instância OTSClient inicializada. Para mais informações, consulte Inicializar uma instância OTSClient.
Tabela de dados criada e com dados gravados. Para mais detalhes, consulte Criar tabelas de dados e Gravar dados.
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 |
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);
}