Tous les produits
Search
Centre de documentation

Tablestore:Utiliser la fonctionnalité de compteur atomique

Dernière mise à jour :Aug 18, 2026

La fonctionnalité de compteur atomique permet d'incrémenter ou de décrémenter une colonne INTEGER en une seule opération thread-safe, sans cycle lecture-modification-écriture.

Prérequis

Remarques d'utilisation

  • Les compteurs atomiques sont disponibles uniquement sur les colonnes de type INTEGER.

  • Si une colonne désignée comme compteur atomique n'existe pas avant l'écriture des données, sa valeur par défaut est 0. Si cette colonne 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 réponse à une requête de mise à jour de ligne ne contient pas la valeur du compteur atomique. Vous pouvez spécifier que la valeur mise à jour doit être retournée.

  • Il est impossible de définir une colonne comme compteur atomique et de la mettre à jour simultanément dans une même requête de mise à jour. Par exemple, si vous configurez la colonne A en tant que compteur atomique, vous ne pouvez pas effectuer d'autres opérations telles que l'écrasement ou la suppression sur cette 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. 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. Il n'est pas possible de modifier la valeur d'une version spécifique. Une fois la mise à jour terminée, une nouvelle version des données est insérée dans le compteur atomique de la ligne.

Opérations API

Les opérations de compteur atomique sont exposées via la classe RowUpdateChange.

Opération

Description

RowUpdateChange Increment(Column)

Incrémente ou décrémente la valeur d'une colonne INTEGER du montant spécifié.

List<String> ReturnColumnNames

Spécifie les colonnes à renvoyer après l'opération de compteur atomique.

ReturnType

Définit le type de retour pour le résultat du compteur atomique.

Paramètres

Paramètre

Description

TableName

Nom de la table de données.

ColumnName

Colonne sur laquelle appliquer l'opération de compteur atomique. Seules les colonnes INTEGER sont prises en charge.

Value

Montant à ajouter ou soustraire à la valeur de la colonne. Utilisez un nombre négatif pour décrémenter.

ReturnColumnNames

Colonnes à renvoyer après l'opération.

ReturnType

Définissez sur ReturnType.RT_AFTER_MODIFY pour renvoyer la valeur mise à jour de la colonne après l'opération.

Exemple

L'exemple suivant incrémente une colonne INTEGER et renvoie la valeur mise à jour.

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);
}