Tous les produits
Search
Centre de documentation

Tablestore:Compteur atomique

Dernière mise à jour :Aug 08, 2026

Pour utiliser un compteur dans votre application en ligne, servez-vous de la fonctionnalité de compteur atomique. Spécifiez une colonne comme compteur atomique et appliquez-lui des opérations de comptage atomique.

Prérequis

  • Initialisez une instance OTSClient. Pour plus d'informations, consultez la rubrique Initialiser une instance OTSClient.

  • Créez une table de données et écrivez-y des données.

Remarques 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 n'est pas de type INTEGER, une erreur OTSParameterInvalid se produit.

  • Mettez à jour un compteur atomique avec une valeur positive ou négative, mais évitez tout dépassement d'entier (integer overflow). En cas de dépassement, le système renvoie une erreur OTSParameterInvalid.

  • Par défaut, la réponse à une demande de mise à jour de ligne ne renvoie pas la valeur d'un compteur atomique. Vous pouvez toutefois demander le retour de la valeur mise à jour du compteur atomique.

  • Il est impossible de définir une colonne comme compteur atomique et de la mettre à jour dans une seule requête. Par exemple, si vous configurez la colonne A en tant que compteur atomique, vous ne pouvez pas effectuer simultanément d'autres opérations sur cette colonne, telles qu'un écrasement ou une suppression.

  • Vous pouvez effectuer plusieurs opérations de mise à jour sur la même ligne en envoyant une requête BatchWriteRow. Toutefois, 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 au sein d'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 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.

Opérations API

Les opérations API permettant d'utiliser la fonctionnalité de compteur atomique sont ajoutées à la classe updateRowChange. Le tableau suivant décrit ces opérations.

Opération

Description

IncrementColumn(columnName string, value int64)

Augmente ou diminue la valeur d'une colonne d'un nombre donné.

AppendIncrementColumnToReturn(name string)

Spécifie le nom de la colonne dont vous souhaitez renvoyer la valeur parmi les colonnes soumises aux opérations de compteur atomique.

SetReturnIncrementValue()

Définit le type de données pour renvoyer la valeur d'un compteur atomique.

Paramètres

Paramètre

Obligatoire

Description

TableName

Oui

Nom de la table de données.

ColumnName

Oui

Nom de la colonne sur laquelle vous souhaitez effectuer des opérations de compteur atomique. Seules les colonnes de type INTEGER peuvent être spécifiées.

Value

Oui

Incrément ou décrément appliqué à la valeur de la colonne.

Exemples

L'exemple de code suivant montre comment appeler l'opération updateRowChange pour augmenter la valeur d'une colonne de type INTEGER lors de l'écriture des données, puis lire les nouvelles valeurs de cette colonne :

func UpdateRowWithIncrement(client *tablestore.TableStoreClient, tableName string) {
    fmt.Println("begin to update row")
    updateRowRequest := new(tablestore.UpdateRowRequest)
    updateRowChange := new(tablestore.UpdateRowChange)
    // Specify the name of the data table. 
    updateRowChange.TableName = tableName
    updatePk := new(tablestore.PrimaryKey)
    updatePk.AddPrimaryKeyColumn("pk1", "pk1increment")
    updatePk.AddPrimaryKeyColumn("pk2", int64(2))
    updatePk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
    updateRowChange.PrimaryKey = updatePk
    // Specify that the value of the col2 column on which operations are performed to implement atomic counter is increased by 30. Do not specify timestamps. 
    updateRowChange.IncrementColumn("col2", int64(30))
    // Return the values of the column on which operations are performed to implement atomic counter. 
    updateRowChange.SetReturnIncrementValue()
    updateRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
    updateRowChange.AppendIncrementColumnToReturn("col2")
    updateRowRequest.UpdateRowChange = updateRowChange

    resp, err := client.UpdateRow(updateRowRequest)
    if err != nil {
        fmt.Println("update failed with error:", err)
        return
    } else {
        fmt.Println("update row finished")
        fmt.Println(len(resp.Columns))
        fmt.Println(resp.Columns[0].ColumnName)
        fmt.Println(resp.Columns[0].Value)
        fmt.Println(resp.Columns[0].Timestamp)
    }
}