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 |
|
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 |
|
returnColumnNames (facultatif) |
Set<String> |
Les colonnes de compteur atomique dont les valeurs mises à jour sont renvoyées. Ajoutez les noms de colonnes en appelant |
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 |
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.
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.