Tous les produits
Search
Centre de documentation

Tablestore:Configurer une transaction locale

Dernière mise à jour :Aug 18, 2026

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

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.

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

    Vous pouvez appeler les opérations GetRow, PutRow, DeleteRow, UpdateRow, BatchWriteRow et GetRange pour manipuler les données dans le cadre de la transaction locale.

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

Remarques d'utilisation

  • Vous ne pouvez pas utiliser simultanément la colonne de clé primaire à incrémentation automatique et la fonctionnalité de transaction locale.

  • Le verrouillage pessimiste contrôle les opérations concurrentes au sein d'une transaction locale.

  • La durée de validité d'une transaction locale est de 60 secondes maximum.

    Si une transaction locale n'est ni validée ni annulée dans un délai de 60 secondes, 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, recommencez les opérations de cette transaction.

  • 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 aux 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 demandes 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 demandes de lecture.

    • Une seule demande peut utiliser une transaction locale à la fois. Lorsqu'une transaction locale est en cours d'utilisation, les autres opérations utilisant le même ID de transaction locale échouent.

    • 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.

    • Chaque transaction accepte jusqu'à 4 Mo de données. Le volume de données écrites dans chaque transaction est calculé de la même manière que pour une demande 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 à la cellule selon la méthode habituelle lors de l'écriture dans la transaction, et non lors de la validation de la transaction.

    • Si une demande BatchWriteRow inclut un ID de transaction locale, toutes les lignes de la demande 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 ajouté aux données associées à la valeur de clé de partition sur laquelle la transaction locale est basée. Seules les demandes d'écriture contenant l'ID de la transaction locale et visant à écrire des données dans cette transaction aboutissent. Les autres demandes non transactionnelles ou les demandes d'écriture contenant les ID d'autres transactions locales échouent. Les données de la transaction locale sont déverrouillées si la transaction est validée, annulée ou si elle expire.

    • Une transaction locale reste valide même si une demande de lecture ou d'écriture avec l'ID de transaction locale est rejetée. Définissez une règle de nouvelle tentative pour renvoyer la demande 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)

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 à l'exemple de code fourni dans les rubriques Écrire des données ou Lire des données pour initier une demande incluant l'ID de transaction locale.