Para implementar um contador em sua aplicação online, utilize o recurso de contador atômico. Para isso, defina uma coluna como contador atômico e execute operações de contador atômico nessa coluna.
Cenários
Contadores atômicos são indicados para cenários em que é necessário executar operações de contagem com rapidez, como contabilizar o número de visualizações de página (PVs) em tempo real sobre diferentes tópicos, o número de mensagens em aplicações online e incrementar os valores de uma coluna específica em 1.
Visão geral
Contadores atômicos reduzem a sobrecarga de desempenho de gravação causada pela consistência forte. Ao enviar uma solicitação ao servidor para executar operações de leitura, modificação e gravação (RMW), o servidor executa as operações em uma linha bloqueando-a. Para garantir consistência forte dos dados, atualize contadores atômicos em um servidor de banco de dados para melhorar o desempenho de gravação.
Erros podem ocorrer quando uma operação de contador atômico encontra timeouts de rede ou falhas do sistema. Nesse caso, repita a operação. Contudo, o contador atômico pode ser atualizado duas vezes, resultando em um valor menor ou maior. Recomenda-se usar o recurso de atualização condicional para atualizar o valor do contador atômico com precisão. Para obter mais informações, consulte Conditional updates.
Use o recurso de contador atômico para coletar estatísticas em tempo real sobre os dados de uma linha. Para implementá-lo, chame a operação UpdateRow para executar operações em contadores atômicos, como incrementar ou decrementar um valor e retornar o valor atualizado.
Por exemplo, crie uma tabela no Tablestore para armazenar metadados de imagens e contabilizar o número de imagens. Cada linha da tabela possui um ID de usuário. Uma coluna da linha armazena os metadados das imagens, enquanto outra coluna funciona como contador atômico para registrar em tempo real o número de imagens cujos metadados estão armazenados naquela linha.
Ao chamar a operação UpdateRow para adicionar os metadados de uma imagem a uma linha, o valor do contador atômico é incrementado em 1.
Ao chamar a operação UpdateRow para excluir os metadados de uma imagem de uma linha, o valor do contador atômico é decrementado em 1.
Chame a operação GetRow para ler o valor do contador atômico e obter o número de imagens cujos metadados estão armazenados na linha.
Isso garante consistência forte no banco de dados. Ao adicionar os metadados de uma imagem a uma linha, o valor do contador atômico da linha é incrementado em 1, e não decrementado.
Notas de uso
Implemente contadores atômicos somente em colunas do tipo INTEGER.
Se uma coluna definida como contador atômico não existir antes da gravação de dados, o valor padrão da coluna será 0. Caso a coluna definida como contador atômico não seja do tipo INTEGER, ocorrerá um erro OTSParameterInvalid.
Atualize um contador atômico com um número positivo ou negativo, mas evite overflow de inteiro. Caso ocorra overflow, um 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. É possível especificar que o valor atualizado do contador atômico seja retornado.
Não é permitido definir uma coluna como contador atômico e atualizá-la na mesma solicitação de atualização. Por exemplo, se a Coluna A for definida como contador atômico, não será possível executar outras operações — como substituição ou exclusão — nessa coluna ao mesmo tempo.
É possível executar várias operações de atualização na mesma linha por meio de uma solicitação BatchWriteRow. Porém, ao executar uma operação de contador atômico em uma linha, somente uma operação de atualização pode ser realizada nessa linha em uma única 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. Após a conclusão de uma operação de atualização, uma nova versão dos dados é inserida no contador atômico da linha.
Métodos
O recurso de contador atômico está disponível apenas por meio dos SDKs do Tablestore.
Use o recurso de contador atômico com Tablestore SDK for Java, Tablestore SDK for Go, Tablestore SDK for Python, Tablestore SDK for Node.js, Tablestore SDK for .NET e Tablestore SDK for PHP. Neste exemplo, o Tablestore SDK for Java é utilizado.
O código a seguir demonstra como usar rowUpdateChange para incrementar o valor de um contador atômico e retornar o valor incrementado:
private static void incrementByUpdateRowApi(SyncClient client) {
// Specify the primary key.
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString("pk0"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
// Specify the table.
RowUpdateChange rowUpdateChange = new RowUpdateChange(TABLE_NAME, primaryKey);
// Set the price column as an atomic counter and increase the value of the atomic counter by 10. You cannot specify the timestamp.
rowUpdateChange.increment(new Column("price", ColumnValue.fromLong(10)));
// Set the data type of the value to return to ReturnType.RT_AFTER_MODIFY and return the value of the atomic counter.
rowUpdateChange.addReturnColumn("price");
rowUpdateChange.setReturnType(ReturnType.RT_AFTER_MODIFY);
// Initiate a request to update the row.
UpdateRowResponse response = client.updateRow(new UpdateRowRequest(rowUpdateChange));
// Display the updated values.
Row row = response.getRow();
System.out.println(row);
}
Faturamento
A implementação de contadores atômicos não afeta as regras de faturamento existentes. Para obter mais informações sobre faturamento, consulte Billing overview.