Tous les produits
Search
Centre de documentation

Tablestore:Use atomic counters

Dernière mise à jour :Aug 20, 2026

Le SDK Tablestore pour Java permet d'incrémenter ou de décrémenter de manière atomique une colonne d'attribut de type entier au niveau de la ligne, et peut renvoyer la valeur mise à jour dans la même requête.

Prérequis

Installez le SDK Tablestore pour Java et initialisez le client.

Description

Appelez increment(Column) pour mettre à jour de manière atomique la colonne entière spécifiée. Une valeur positive entraîne une incrémentation, tandis qu'une valeur négative provoque une décrémentation. Tablestore garantit l'atomicité au niveau de la ligne et écrit une nouvelle version des données après la mise à jour. Pour renvoyer la valeur mise à jour dans la même requête, appelez addReturnColumn(String) et définissez returnType sur RT_AFTER_MODIFY.

public UpdateRowResponse updateRow(UpdateRowRequest updateRowRequest) throws TableStoreException, ClientException
public RowUpdateChange increment(Column column)
public void addReturnColumn(String columnName)
public void setReturnType(ReturnType returnType)

L'exemple suivant incrémente la colonne price de 10 pour la ligne dont la clé primaire est pk0 dans la table counter_demo, et lit la valeur mise à jour dans la même requête.

PrimaryKey primaryKey = PrimaryKeyBuilder.createPrimaryKeyBuilder()
        .addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("pk0"))
        .build();

RowUpdateChange rowUpdateChange = new RowUpdateChange("counter_demo", primaryKey);

// Increment the price column by 10 (use a negative value to decrement)
rowUpdateChange.increment(new Column("price", ColumnValue.fromLong(10)));

// Return the updated column value in the same request
rowUpdateChange.addReturnColumn("price");
rowUpdateChange.setReturnType(ReturnType.RT_AFTER_MODIFY);

UpdateRowResponse response = client.updateRow(new UpdateRowRequest(rowUpdateChange));
Row row = response.getRow();
System.out.println("Updated price: " + row.getLatestColumn("price").getValue().asLong());

Paramètres

Configuration de la requête

L'objet UpdateRowRequest contient les paramètres suivants.

Nom

Type

Description

rowChange (obligatoire)

RowUpdateChange

La configuration de la mise à jour d'une seule ligne.

transactionId (facultatif)

String

L'ID de la transaction locale. Spécifiez ce paramètre uniquement lorsque vous effectuez l'opération de compteur atomique dans une transaction locale.

Pour savoir comment obtenir et utiliser cet ID, consultez Utiliser des transactions locales.

Configuration de la mise à jour de ligne

Le paramètre rowChange de UpdateRowRequest est de type RowUpdateChange.

Nom

Type

Description

tableName (obligatoire)

String

Le nom de la table de données.

primaryKey (obligatoire)

PrimaryKey

La clé primaire de la ligne cible.

columnsToUpdate (obligatoire)

List<Pair<Column, Type>>

Les colonnes d'attributs à mettre à jour. Appelez increment(Column) pour ajouter une opération de compteur atomique.

condition (facultatif)

Condition

La configuration de la mise à jour conditionnelle. L'opération de compteur atomique n'est effectuée que si la ligne satisfait la condition.

Pour savoir comment configurer la condition, consultez Utiliser des mises à jour conditionnelles.

returnType (facultatif)

ReturnType

Le type de retour. La valeur par défaut est RT_NONE. Pour renvoyer la valeur mise à jour, définissez ce paramètre sur RT_AFTER_MODIFY.

returnColumnNames (facultatif)

Set<String>

Les colonnes de compteur atomique dont les valeurs mises à jour sont renvoyées. Ajoutez les noms de colonnes en appelant addReturnColumn() et utilisez ce paramètre conjointement avec RT_AFTER_MODIFY.

Colonne du compteur

Chaque élément ajouté à UpdateRowRequest.rowChange.columnsToUpdate par increment() contient un objet Column.

Nom

Type

Description

name (obligatoire)

String

Le nom de la colonne d'attribut sur laquelle appliquer l'opération de compteur atomique.

value (obligatoire)

ColumnValue

La valeur d'incrémentation entière. Une valeur positive incrémente et une valeur négative décrémente. Le résultat ne doit pas provoquer de dépassement de capacité. Si la colonne cible n'existe pas, sa valeur initiale est traitée comme 0.

Réponse

Nom

Type

Description

row

Row

Si RT_AFTER_MODIFY est spécifié, ce champ contient les valeurs mises à jour des colonnes de compteur atomique ajoutées par addReturnColumn(). Appelez getRow() pour obtenir la valeur.

Limites

  • Les opérations de compteur atomique prennent en charge uniquement les colonnes de type entier. Si la colonne existe mais n'est pas de type entier, l'opération renvoie l'erreur OTSParameterInvalid.

  • Les opérations de compteur atomique s'appliquent uniquement à la dernière version et n'acceptent pas d'horodatage spécifié par l'utilisateur.

  • Dans une seule requête de mise à jour, vous ne pouvez pas combiner une opération de compteur atomique avec d'autres opérations sur la même colonne, telles que l'écrasement ou la suppression.

  • Dans une requête BatchWriteRow, une ligne avec une opération de compteur atomique ne peut apparaître qu'une seule fois.

Important

Les opérations de compteur atomique peuvent échouer en raison de délais d'expiration réseau ou d'erreurs système. Une nouvelle tentative peut appliquer l'incrémentation deux fois, ce qui rend le compteur plus élevé (ou plus bas) que prévu par la valeur d'incrémentation. Pour éviter les doubles comptages, utilisez une mise à jour conditionnelle pour mettre à jour la valeur en fonction de son état actuel.