Tous les produits
Search
Centre de documentation

Tablestore:Utiliser la fonctionnalité de compteur atomique

Dernière mise à jour :Sep 18, 2026

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 des opérations de comptage atomique.

Scénarios

Les compteurs atomiques conviennent aux scénarios nécessitant un comptage rapide, 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 les valeurs d'une colonne spécifique.

Vue d'ensemble

Les compteurs atomiques réduisent la surcharge des performances d'écriture liée à la cohérence forte. Lorsque vous envoyez une requête au serveur pour effectuer des opérations de lecture, modification et écriture (RMW), celui-ci verrouille la ligne concernée avant d'appliquer les modifications. Pour garantir une forte cohérence des données tout en améliorant les performances d'écriture, mettez à jour les compteurs atomiques directement sur le serveur de base de données.

Important

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 sa valeur (à 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.

La fonctionnalité de compteur atomique permet de collecter des statistiques en temps réel sur les données d'une ligne. Pour l'utiliser, appelez l'opération UpdateRow afin d'incrémenter ou décrémenter la valeur du compteur atomique et de récupérer 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 identifiant utilisateur. Une colonne sert à stocker les métadonnées des images, tandis qu'une autre agit comme compteur atomique pour suivre en temps réel le nombre d'images dont les métadonnées sont enregistré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 cette ligne est incrémentée de 1 au lieu d'être décrémentée.

Notes d'utilisation

  • Vous ne pouvez implémenter des compteurs atomiques que sur des colonnes de type INTEGER.

  • Si la colonne spécifiée comme compteur atomique n'existe pas avant l'écriture des données, sa valeur par défaut est 0. Si la colonne désignée comme compteur atomique n'est pas de type INTEGER, une erreur OTSParameterInvalid se produit.

  • Vous pouvez mettre à jour un compteur atomique avec un nombre positif ou négatif, mais vous devez éviter tout dépassement de capacité entier (integer overflow). 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. Spécifiez que la valeur mise à jour du compteur atomique doit être retournée.

  • Il est impossible de définir une colonne comme compteur atomique et de la mettre à jour simultanément dans une seule requête de mise à jour. Par exemple, si vous configurez la colonne A comme compteur atomique, vous ne pouvez pas effectuer d'autres opérations (comme l'écrasement ou la suppression) sur cette même colonne en même temps.

  • Vous pouvez effectuer plusieurs opérations de mise à jour sur la même ligne en envoyant une requête BatchWriteRow. Cependant, si vous réalisez une opération de compteur atomique sur une ligne, vous ne pouvez effectuer 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. Il n'est pas possible de mettre à jour la valeur d'une version spécifique. 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

Important

La fonctionnalité de compteur atomique est disponible uniquement via les SDK Tablestore.

Vous pouvez utiliser la fonctionnalité de compteur atomique avec les SDK suivants : SDK Tablestore pour Java, SDK Tablestore pour Go, SDK Tablestore pour Python, SDK Tablestore pour Node.js, SDK Tablestore pour .NET et SDK Tablestore pour PHP. Cet exemple utilise le SDK Tablestore pour Java.

Le code suivant illustre l'utilisation de 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 Présentation de la facturation.