Pour utiliser un compteur dans votre application en ligne, exploitez la fonctionnalité de compteur atomique. Définissez une colonne comme compteur atomique et effectuez les opérations associées sur cette colonne.
Prérequis
Une instance OTSClient est initialisée. Pour plus d'informations, consultez la rubrique Initialiser une instance OTSClient.
Une table de données est créée et des données y sont écrites. Pour plus d'informations, consultez les rubriques Créer une table de données et Écrire des données.
Remarques d'utilisation
Les compteurs atomiques sont pris en charge uniquement sur les 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 spécifiée 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, le système renvoie une erreur OTSParameterInvalid.
Par défaut, la réponse à une requête de mise à jour de ligne ne renvoie pas la valeur du compteur atomique. Vous pouvez configurer la requête pour qu'elle renvoie la valeur mise à jour.
Il est impossible de définir une colonne comme compteur atomique et de la mettre à jour dans la même requête. Par exemple, si vous définissez la colonne A comme compteur atomique, vous ne pouvez pas simultanément écraser ou supprimer cette colonne.
Vous pouvez effectuer plusieurs opérations de mise à jour sur la même ligne via une requête BatchWriteRow. Toutefois, si vous utilisez un compteur atomique sur une ligne, vous ne pouvez exécuter qu'une seule opération de mise à jour sur cette ligne dans la requête BatchWriteRow.
Seule la valeur de la dernière version d'un compteur atomique peut être mise à jour. Il est impossible de modifier la valeur d'une version spécifique. Une fois l'opération terminée, le système insère une nouvelle version des données dans le compteur atomique de la ligne.
Opérations API
L'opération liée au compteur atomique s'intègre à l'opération updateRow. Le tableau suivant décrit cette opération.
|
Operation |
Description |
|
updateOfAttributeColumns |
Définit INCREMENT comme type de mise à jour pour augmenter ou diminuer la valeur d'une colonne d'un entier spécifique. |
|
returnContent |
Spécifie le nom de la colonne dont la valeur doit être renvoyée parmi celles utilisées pour le compteur atomique. |
Paramètre
|
Parameter |
Description |
|
tableName |
Nom de la table de données. |
|
columnName |
Nom de la colonne sur laquelle appliquer le compteur atomique. Cette fonctionnalité est prise en charge uniquement sur les colonnes de type INTEGER. |
|
value |
Valeur d'incrémentation ou de décrémentation de la colonne. |
|
returnColumns |
Spécifie le nom de la colonne dont la valeur doit être renvoyée parmi celles utilisées pour le compteur atomique. |
|
returnType |
Définit le type de retour sur TableStore.ReturnType.AfterModify pour renvoyer les valeurs des colonnes utilisées pour le compteur atomique. |
Exemple
L'exemple de code suivant montre comment utiliser INCREMENT comme type de mise à jour pour modifier la valeur d'une colonne d'attribut de type INTEGER lors de l'appel de l'opération updateRow :
var params = {
tableName: "<Your-Table-Name>",
condition: new TableStore.Condition(TableStore.RowExistenceExpectation.EXPECT_EXIST, null),
primaryKey: [{'pk0': Long.fromNumber(1)}],
// Specify the price column as an atomic counter and increase the value of the atomic counter by 10. You cannot specify the timestamp.
updateOfAttributeColumns: [
{'INCREMENT': [{'price': Long.fromNumber(10)}]}
],
// Set the return type to TableStore.ReturnType.AfterModify and return the values of the columns on which operations are performed to implement atomic counter.
returnContent: {
returnColumns: ["price"],
returnType: TableStore.ReturnType.AfterModify
}
};
client.updateRow(params,
function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', JSON.stringify(data, null, 2));
});