Pour intégrer un compteur dans votre application en ligne, utilisez la fonctionnalité de compteur atomique. Définissez une colonne comme compteur atomique et effectuez des opérations de comptage atomique sur cette colonne.
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. Pour plus d'informations, reportez-vous aux rubriques Créer une table de données et Écrire des données.
Notes d'utilisation
Les compteurs atomiques sont pris en charge uniquement sur les colonnes de type INTEGER.
Si la colonne désigné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 en ajoutant ou en soustrayant une valeur entière, mais vous devez éviter tout dépassement de capacité (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 contient pas la valeur du compteur atomique. Vous pouvez toutefois configurer la requête pour renvoyer la valeur mise à jour.
Il est impossible de définir une colonne comme compteur atomique et de la mettre à jour simultanément dans une seule 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 qu'un écrasement ou une suppression, sur cette même colonne au cours de la même opération.
Bien qu'il soit possible d'effectuer plusieurs opérations de mise à jour sur la même ligne via une requête BatchWriteRow, une restriction s'applique : si une opération de compteur atomique est effectuée sur une ligne, seule une opération de mise à jour est autorisée pour cette ligne dans la 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
L'opération liée au compteur atomique est intégrée à l'opération updateRow. Le tableau suivant décrit les paramètres associés au compteur atomique.
|
Opération |
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 vous souhaitez renvoyer la valeur parmi les colonnes sur lesquelles des opérations sont effectuées pour implémenter le compteur atomique. |
Paramètres
|
Paramètre |
Description |
|
tableName |
Nom de la table de données. |
|
columnName |
Nom de la colonne sur laquelle vous souhaitez effectuer des opérations de compteur atomique. Les compteurs atomiques sont pris en charge uniquement sur les colonnes de type INTEGER. |
|
value |
Valeur d'incrémentation ou de décrémentation appliquée à la colonne. |
|
returnColumns |
Spécifie le nom de la colonne dont vous souhaitez renvoyer la valeur parmi les colonnes sur lesquelles des opérations sont effectuées pour implémenter le compteur atomique. |
|
returnType |
Définit le type de retour sur TableStore.ReturnType.AfterModify afin de renvoyer les valeurs des colonnes sur lesquelles des opérations sont effectuées pour implémenter le compteur atomique. |
Exemple
L'exemple de code suivant illustre l'utilisation du type de mise à jour INCREMENT 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));
});