Tous les produits
Search
Centre de documentation

Tablestore:Configurer une transaction locale

Dernière mise à jour :Oct 09, 2026

Une fois la fonctionnalité de transaction locale activée pour une table de données, créez une transaction locale basée sur la valeur de clé de partition spécifiée et effectuez des opérations de lecture et d'écriture sur les données au sein de cette transaction. La fonctionnalité de transaction locale permet d'exécuter des opérations atomiques pour lire ou écrire une ou plusieurs lignes.

Une transaction locale garantit que toutes les opérations effectuées sur les données partageant la même clé de partition réussissent ou échouent simultanément. Le niveau d'isolation de la transaction locale est Read Committed.

Prérequis

Utiliser la fonctionnalité de transaction locale

  1. Appelez startLocalTransaction pour créer une transaction locale basée sur la valeur de clé de partition spécifiée et obtenir l'ID de la transaction locale.

  2. Lisez et écrivez des données au sein de la transaction locale.

    Appelez les opérations GetRow, PutRow, DeleteRow, UpdateRow, BatchWriteRow et GetRange pour manipuler les données dans le contexte de la transaction locale.

  3. Appelez commitTransaction pour valider la transaction locale ou abortTransaction pour l'annuler.

Remarques d'utilisation

  • Il est impossible d'utiliser simultanément la fonctionnalité de colonne de clé primaire auto-incrémentée et celle de transaction locale.

  • Le verrouillage pessimiste gère les opérations concurrentes au sein d'une transaction locale.

  • La durée de validité d'une transaction locale peut atteindre 60 secondes.

    Si une transaction locale n'est ni validée ni annulée dans ce délai, le serveur Tablestore considère qu'elle a expiré et l'annule automatiquement.

  • Une transaction peut être créée sur le serveur Tablestore même si une erreur de délai d'attente est renvoyée. Dans ce cas, renvoyez une demande de création de transaction après l'expiration de la transaction précédemment créée.

  • Si une transaction locale n'est pas validée, elle peut devenir invalide. Dans ce cas, réessayez les opérations concernées.

  • Si aucune opération d'écriture n'est effectuée sur les données d'une transaction locale, les opérations de validation et d'annulation produisent le même effet.

  • Tablestore impose les limites suivantes aux opérations de lecture et d'écriture sur les données d'une transaction locale :

    • L'ID de transaction locale ne permet pas d'accéder à des données situées en dehors de la plage définie par la valeur de clé de partition utilisée pour créer la transaction.

    • Les valeurs de clé de partition de toutes les requêtes d'écriture au sein d'une même transaction doivent correspondre à la valeur de clé de partition utilisée pour créer la transaction. Cette restriction ne s'applique pas aux requêtes de lecture.

    • Une transaction locale ne peut être utilisée que par une seule requête à la fois. Lorsqu'elle est en cours d'utilisation, toute autre opération utilisant le même ID de transaction locale échoue.

    • L'intervalle maximal entre deux opérations consécutives de lecture ou d'écriture sur les données d'une transaction locale est de 60 secondes.

      Si aucune opération de lecture ou d'écriture n'est effectuée sur les données d'une transaction locale pendant plus de 60 secondes, le serveur Tablestore considère que la transaction a expiré et l'annule.

    • Jusqu'à 4 Mo de données peuvent être écrits dans chaque transaction. Le volume de données écrites est calculé de la même manière que pour une requête d'écriture standard.

    • Si vous ne spécifiez pas de numéro de version pour une cellule, le serveur Tablestore attribue automatiquement un numéro de version selon la méthode habituelle lors de l'écriture de la cellule dans la transaction, et non lors de la validation de la transaction.

    • Si une requête BatchWriteRow inclut un ID de transaction locale, toutes les lignes de la requête ne peuvent être écrites que dans la table correspondant à cet ID de transaction locale.

    • Lorsque vous utilisez une transaction locale, un verrou d'écriture est appliqué aux données associées à la valeur de clé de partition sur laquelle la transaction est basée. Seules les requêtes d'écriture contenant l'ID de la transaction locale et visant à modifier les données de cette transaction aboutissent. Les autres requêtes non transactionnelles ou les requêtes d'écriture contenant les ID d'autres transactions locales échouent. Les données de la transaction locale sont déverrouillées lorsque la transaction est validée, annulée ou expire.

    • Une transaction locale reste valide même si une requête de lecture ou d'écriture avec son ID est rejetée. Définissez une règle de nouvelle tentative pour renvoyer la requête, ou annulez la transaction.

Opérations API

Cette section décrit les opérations API suivantes liées à la fonctionnalité de transaction locale : startLocalTransaction, commitTransaction et abortTransaction.

startLocalTransaction

    /**
     * Create a local transaction and obtain the local transaction ID. 
     * @api
     * @param [] $request
     *            The request parameters, including the table name and partition key. 
     * @return [] The response. 
     * @throws OTSClientException The exception that is returned when a parameter error occurs or the Tablestore server returns a verification error. 
     * @throws OTSServerException The exception that is returned when the Tablestore server returns an error. 
     * @example "src/examples/StartLocalTransaction.php" 50
     */
    public function startLocalTransaction(array $request)

commitTransaction

    /**
     * Commit a local transaction. 
     * @api
     *
     * @param [] $request
     *          The request parameter, which is the transaction ID. 
     * @return [] The response. 
     * @throws OTSClientException The exception that is returned when a parameter error occurs or the Tablestore server returns a verification error. 
     * @throws OTSServerException The exception that is returned when the Tablestore server returns an error. 
     * @example "src/examples/CommitTransaction.php" 50
     */
    public function commitTransaction(array $request)

abortTransaction

    /**
     * Abort a local transaction. 
     * @api
     *
     * @param [] $request
     *          The request parameter, which is the transaction ID. 
     * @return [] The response. 
     * @throws OTSClientException The exception that is returned if a parameter error occurs or the Tablestore server returns a verification error. 
     * @throws OTSServerException The exception that is returned if the Tablestore server returns an error. 
     * @example "src/examples/AbortTransaction.php" 20
     */
    public function abortTransaction(array $request)

Paramètres

Paramètre

Description

table_name

Nom de la table de données.

key

Clé de partition de la table de données.

Spécifiez une valeur de clé de partition lors de la création d'une transaction locale.

primary_key

Clé primaire de la table de données.

Spécifiez les valeurs de toutes les colonnes de clé primaire lors de la lecture et de l'écriture de données dans une transaction locale.

transaction_id

ID de la transaction locale qui identifie de manière unique une transaction locale.

Spécifiez un ID de transaction locale lors de la lecture et de l'écriture de données dans une transaction locale.

Exemples

Utiliser la fonctionnalité de transaction locale pour écrire une ligne de données

Dans cet exemple, une ligne de données est écrite dans une transaction locale créée pour une clé de partition spécifiée d'une table, puis la transaction locale est validée.

// Obtain the local transaction ID.  
$response = $client->startLocalTransaction (array (
    'table_name' => 'TransactionTable',
// The primary key is [PK0:INTEGER,PK1:STRING]. 
    'key' => array(  
        array('PK0', 123)
    )
));

$attr = array();
$attr[] = ['col0', 'bbb'];

$request = [
    'table_name' => 'TransactionTable',
    'condition' => RowExistenceExpectationConst::CONST_IGNORE, // You can set condition to IGNORE, EXPECT_EXIST, or EXPECT_NOT_EXIST. 
// Specify the primary key. 
    'primary_key' => [ 
        ['PK0', 123],
        ['PK1', 'abc']
    ],
    'attribute_columns' => $attr,
    'transaction_id' => $response['transaction_id']  
];
// Execute the putRow method to write data.  
$client->putRow($request);
// Commit the transaction for all data modifications within the transaction to take effect. You can discard a local transaction to invalidate all data modifications in the local transaction.  
$client->commitTransaction(array(      
    'transaction_id' => $response['transaction_id']
));
// Abort the local transaction to move all data modifications within the transaction out of effect.  
// $client->abortTransaction(array( 
//     'transaction_id' => $response['transaction_id']
// ));

Utiliser la fonctionnalité de transaction locale pour lire une ligne de données

Dans cet exemple, une ligne de données est lue dans une transaction locale créée pour une clé de partition spécifiée d'une table.

// Obtain the local transaction ID. 
$response = $client->startLocalTransaction (array (
    'table_name' => 'TransactionTable',
// The primary key is [PK0:INTEGER,PK1:STRING]. 
    'key' => array(  
        array('PK0', 123)
    )
));

$request = array(
    'table_name' => 'TransactionTable',
// Specify the primary key. 
    'primary_key' => array (
        array('PK0', 123),
        array('PK1', 'abc')
    ),
    'max_versions' => 1,
    'columns_to_get' => ['col0'],
    'transaction_id' => $response['transaction_id']
);
// Execute the getRow method to read data.  
$client->getRow($request);
// Commit or abort the local transaction. The effect on a read operation when you commit or discard a local transaction is the same. 
// Commit the transaction for all data modifications within the transaction to take effect. 
$client->commitTransaction(array(// Commit the transaction 
    'transaction_id' => $response['transaction_id']
 ));
// Abort the local transaction to move all data modifications within the transaction out of effect. 
// $client->abortTransaction(array(
//     'transaction_id' => $response['transaction_id']
// ));

Références

Pour écrire plusieurs lignes de données simultanément ou lire des données dont les valeurs de clé primaire se situent dans une plage spécifique, créez une transaction locale. Ensuite, reportez-vous au code fourni dans les rubriques Écrire des données ou Lire des données pour initier une requête incluant l'ID de transaction locale.