Pour implémenter un compteur dans votre application en ligne, utilisez la fonctionnalité de compteur atomique. Définissez une colonne comme compteur atomique et effectuez-y les opérations correspondantes.
Scénarios
Les compteurs atomiques conviennent aux scénarios nécessitant des opérations de comptage rapides, par exemple pour suivre le nombre de pages vues (PV) en temps réel sur divers sujets ou le nombre de messages dans certaines applications en ligne, en incrémentant de 1 la valeur d'une colonne spécifique.
Vue d'ensemble
Les compteurs atomiques réduisent la surcharge liée à la cohérence forte lors des écritures. Lors d'opérations de lecture, modification et écriture (RMW), le serveur verrouille la ligne concernée avant d'exécuter les opérations. L'utilisation de compteurs atomiques sur le serveur de base de données permet de garantir une forte cohérence des données tout en améliorant les performances en écriture.
Une erreur peut survenir lors d'une opération de compteur atomique en cas de délai d'expiration réseau ou de défaillance système. Dans ce cas, réessayez l'opération. Toutefois, le compteur atomique risque d'être mis à jour deux fois, ce qui faussera la valeur finale (à la hausse ou à la baisse). Nous vous recommandons d'utiliser la fonctionnalité de mise à jour conditionnelle pour mettre à jour précisément la valeur du compteur atomique. Pour plus d'informations, consultez la rubrique Mises à jour conditionnelles.
Utilisez la fonctionnalité de compteur atomique pour collecter des statistiques en temps réel sur les données d'une ligne. Pour ce faire, appelez l'opération UpdateRow afin d'incrémenter ou de décrémenter la valeur du compteur atomique et de renvoyer la valeur mise à jour.
Par exemple, créez une table Tablestore pour stocker les métadonnées des images et en compter le nombre. Chaque ligne de la table contient un ID utilisateur. Une colonne sert à stocker les métadonnées des images. Une autre colonne agit comme compteur atomique pour suivre en temps réel le nombre d'images dont les métadonnées sont stockées dans cette ligne.
Lorsque vous appelez l'opération UpdateRow pour ajouter les métadonnées d'une image à une ligne, la valeur du compteur atomique est incrémentée de 1.
Lorsque vous appelez l'opération UpdateRow pour supprimer les métadonnées d'une image d'une ligne, la valeur du compteur atomique est décrémentée de 1.
Appelez l'opération GetRow pour lire la valeur du compteur atomique et obtenir le nombre d'images dont les métadonnées sont stockées dans la ligne.
Cette approche garantit une forte cohérence de la base de données. Lorsque vous ajoutez les métadonnées d'une image à une ligne, la valeur du compteur atomique de la ligne est incrémentée de 1 au lieu d'être décrémentée.
Remarques d'utilisation
Vous ne pouvez implémenter des compteurs atomiques que sur des colonnes de type INTEGER.
Si une colonne spécifiée comme compteur atomique n'existe pas avant l'écriture des données, sa valeur par défaut est 0. Si une colonne spécifiée comme compteur atomique n'est pas de type INTEGER, une erreur OTSParameterInvalid se produit.
Vous pouvez mettre à jour un compteur atomique à l'aide d'un nombre positif ou négatif, mais vous devez éviter tout dépassement de capacité entier. En cas de dépassement, une erreur OTSParameterInvalid est renvoyée.
Par défaut, la valeur d'un compteur atomique n'est pas renvoyée dans la réponse à une requête de mise à jour de ligne. Vous pouvez spécifier le renvoi de la valeur mise à jour du compteur atomique.
Vous ne pouvez pas définir une colonne comme compteur atomique et la mettre à jour simultanément dans une seule requête. Par exemple, si vous définissez la colonne A comme compteur atomique, vous ne pouvez pas effectuer d'autres opérations telles que l'écrasement ou la suppression sur cette colonne dans la même requête.
Vous pouvez effectuer plusieurs opérations de mise à jour sur la même ligne en envoyant une requête BatchWriteRow. Toutefois, si vous effectuez une opération de compteur atomique sur une ligne, vous ne pouvez réaliser qu'une seule opération de mise à jour sur cette ligne dans une requête BatchWriteRow.
Seule la valeur de la dernière version d'un compteur atomique peut être mise à jour. Vous ne pouvez pas mettre à jour la valeur d'une version spécifique d'un compteur atomique. Une fois l'opération de mise à jour terminée, une nouvelle version des données est insérée dans le compteur atomique de la ligne.
Méthodes
Vous pouvez utiliser la fonctionnalité de compteur atomique uniquement via les SDK Tablestore.
Vous pouvez utiliser la fonctionnalité de compteur atomique avec le SDK Tablestore pour Java, le SDK Tablestore pour Go, le SDK Tablestore pour Python, le SDK Tablestore pour Node.js, le SDK Tablestore pour .NET et le SDK Tablestore pour PHP. Cet exemple utilise le SDK Tablestore pour Java.
Le code suivant montre comment utiliser rowUpdateChange pour incrémenter la valeur d'un compteur atomique et renvoyer la valeur incrémentée :
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);
}
Facturation
La mise en œuvre des compteurs atomiques n'affecte pas les règles de facturation existantes. Pour plus d'informations sur la facturation, consultez la rubrique Vue d'ensemble de la facturation.