Pour implémenter 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
Le client est initialisé. Pour plus d'informations, consultez la rubrique Initialiser le client Tablestore.
Une table de données est créée et contient des données. Pour plus d'informations, consultez la rubrique Créer une table de données.
Remarques d'utilisation
Les compteurs atomiques sont disponibles uniquement pour les colonnes de type INTEGER.
Si une 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 d'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 renvoyer 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 configurez la colonne A comme compteur atomique, vous ne pouvez pas effectuer simultanément d'autres opérations (écrasement ou suppression) sur cette colonne.
Vous pouvez effectuer plusieurs opérations de mise à jour sur la même ligne via une requête BatchWriteRow. Toutefois, 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 est impossible de mettre à jour la valeur d'une version spécifique. Une fois la mise à jour terminée, le système insère une nouvelle version des données dans le compteur atomique de la ligne.
Syntaxe
/**
* Update a row of data.
* @api
* @param [] $request The request parameters.
* @return [] The response.
* @throws OTSClientException The exception that is thrown if a parameter error occurs or the Tablestore server returns a verification error.
* @throws OTSServerException The exception that is thrown if the Tablestore server returns an error.
*/
public function updateRow(array $request);
Appelez la méthode updateRow pour effectuer des opérations de compteur atomique. Le tableau suivant répertorie les opérations prises en charge.
|
Opération |
Description |
|
update_of_attribute_columns |
Définissez le type de mise à jour sur INCREMENT pour incrémenter ou décrémenter la valeur d'une colonne d'un entier spécifique. Format de configuration :
|
|
return_content |
Renvoie la valeur mise à jour de la colonne. Spécifiez le nom de la colonne et définissez return_type sur
|
Paramètres
|
Paramètre |
Description |
|
table_name |
Nom de la table. |
|
column_name |
Nom de la colonne sur laquelle effectuer l'opération de compteur atomique. Seules les colonnes de type INTEGER sont prises en charge. |
|
value |
Montant de l'incrément ou du décrément à appliquer à la valeur de la colonne. |
|
return_content |
Informations de colonne à renvoyer après l'opération de compteur atomique. Contient les paramètres suivants :
|
Exemple
L'exemple suivant incrémente la valeur d'une colonne de type INTEGER lors de l'écriture des données et renvoie la valeur mise à jour.
$request = array (
// Specify the name of the table.
'table_name' => 'MyTable',
// Set the row existence condition to RowExistenceExpectationConst::CONST_IGNORE, which specifies that the existence of rows is not checked.
'condition' => RowExistenceExpectationConst::CONST_IGNORE,
// Specify the primary key. The number and types of primary key columns that you specify must be the same as the actual number and types of primary key columns in the table.
'primary_key' => array (
// The name of the first primary key column is PK0, the data type is INTEGER, and the column value is 123.
array('PK0', 123),
// The name of the second primary key column is PK1, the data type is STRING, and the column value is 'inc'.
array('PK1', 'inc')
),
// The attribute column whose value is to be updated. Three operation types are supported: PUT, DELETE, and DELETE_ALL.
'update_of_attribute_columns'=> array(
'INCREMENT' => array (
// Specify the column on which the atomic counter operation is to be performed. The column name is attr0, the increment in the column value is 1, and the data type is INTEGER.
array('attr0', 1, ColumnTypeConst::CONST_INTEGER),
),
'PUT' => array(
array('attr1', 1, ColumnTypeConst::CONST_INTEGER),
)
),
// Return the column information after the atomic counter operation is performed.
'return_content' => array(
'return_type' => ReturnTypeConst::CONST_AFTER_MODIFY,
'return_column_names' => array('attr0')
)
);
$response = $otsClient->updateRow ($request);
print json_encode ($response);