Tous les produits
Search
Centre de documentation

Tablestore:Use the atomic counter feature

Dernière mise à jour :Aug 18, 2026

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 les opérations correspondantes sur cette colonne.

Prérequis

Notes d'utilisation

  • Les compteurs atomiques sont compatibles uniquement avec 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 les dépassements 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 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 mises à jour sur la même ligne via une requête BatchWriteRow. Toutefois, si vous appliquez une opération de compteur atomique à une ligne, cette dernière ne peut faire l'objet que d'une seule opération de mise à jour 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 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 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 :

'update_of_attribute_columns'=> array(
    'INCREMENT' => array (     
        array('<column_name>', <value>, ColumnTypeConst::CONST_INTEGER), 
    ),
)

return_content

Renvoie la valeur mise à jour de la colonne. Spécifiez le nom de la colonne et définissez return_type sur ReturnTypeConst::CONST_AFTER_MODIFY. Format de configuration :

'return_content' => array(
            'return_type' => ReturnTypeConst::CONST_AFTER_MODIFY,
            'return_column_names' => array('<column_name>')
         )

Paramètres

Paramètre

Description

table_name

Nom de la table.

column_name

Nom de la colonne sur laquelle appliquer l'opération de compteur atomique. Seules les colonnes de type INTEGER sont prises en charge.

value

Valeur d'incrémentation ou de décrémentation à appliquer à la colonne.

return_content

Informations de colonne à renvoyer après l'opération de compteur atomique. Ce paramètre contient les éléments suivants :

  • return_type : Définissez ce paramètre sur ReturnTypeConst::CONST_AFTER_MODIFY pour renvoyer la valeur mise à jour de la colonne.

  • return_column_names : Nom de la colonne dont la valeur mise à jour doit être renvoyée.

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);