Para implementar um contador em seu aplicativo online, use o recurso de contador atômico. Defina uma coluna como contador atômico e execute operações de contador atômico na coluna.
Cenários
Contadores atômicos são adequados para cenários que exigem contagem rápida, como contar o número de visualizações de página (PVs) em tempo real de diversos tópicos, contar mensagens em aplicativos 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 a um servidor para operações de leitura, modificação e gravação (RMW), o servidor bloqueia a linha para executar as operações. Para garantir a consistência forte dos dados, atualize contadores atômicos em um servidor de banco de dados para melhorar o desempenho de gravação.
Um erro pode ocorrer quando uma operação de contador atômico encontra tempos limite de rede ou falhas do sistema. Nesse caso, você pode tentar a operação novamente. No entanto, o contador atômico pode ser atualizado duas vezes, o que resulta em um valor de contador atômico menor ou maior. Recomenda-se usar o recurso de atualização condicional para atualizar o valor do contador atômico com precisão. Para mais informações, consulte Atualizações condicionais.
Use o recurso de contador atômico para coletar estatísticas em tempo real dos dados em uma linha. Para implementar o recurso de contador atômico, chame a operação UpdateRow para executar operações em contadores atômicos, como incrementar ou decrementar o valor de um contador atômico e retornar o valor atualizado.
Por exemplo, crie uma tabela do Tablestore para armazenar metadados de imagens e contar o número de imagens. Cada linha na tabela possui um ID de usuário. Uma coluna da linha armazena os metadados das imagens. Outra coluna funciona como contador atômico para contar em tempo real o número de imagens cujos metadados estão armazenados na linha.
-
Ao chamar a operação UpdateRow para adicionar os metadados de uma imagem a uma linha, o valor do contador atômico aumenta em 1.
-
Ao chamar a operação UpdateRow para excluir os metadados de uma imagem de uma linha, o valor do contador atômico diminui 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 a consistência forte do banco de dados. Ao adicionar os metadados de uma imagem a uma linha, o valor do contador atômico da linha aumenta em 1 em vez de diminuir em 1.
Observações de uso
-
Contadores atômicos funcionam apenas em colunas 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 uma coluna INTEGER, o erro OTSParameterInvalid ocorrerá.
-
Atualize um contador atômico com um número positivo ou negativo, mas evite overflow de inteiro. Se ocorrer overflow 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 a 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 coluna ao mesmo tempo.
-
Execute 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, você pode executar apenas uma operação de atualização na linha em uma solicitação BatchWriteRow.
-
Apenas 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 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 de Tablestore SDKs.
Use o recurso de contador atômico por meio do 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 mostra um exemplo de 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 mais informações sobre faturamento, consulte Visão geral do faturamento.