Tous les produits
Search
Centre de documentation

Tablestore:Transaction locale

Dernière mise à jour :Aug 18, 2026

Après avoir activé la fonctionnalité de transaction locale 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. Cette fonctionnalité permet d'exécuter des opérations atomiques de lecture et d'écriture sur une ou plusieurs lignes.

Une transaction locale garantit que les opérations portant sur des données partageant la même clé de partition réussissent toutes ou échouent toutes. 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 son ID.

  2. Lisez et écrivez des données dans la transaction locale.

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

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

Notes 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 dans 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 ce délai, le serveur Tablestore la considère comme expirée et l'annule.

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

  • Si une transaction locale n'est pas validée, elle peut devenir invalide. Réessayez alors 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 ont 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 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 dans la même transaction doivent correspondre à celle utilisée pour créer la transaction. Cette limite ne s'applique pas aux demandes de lecture.

    • Une transaction locale ne peut être utilisée que par une seule demande à la fois. Tant qu'elle est utilisée, 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 la considère comme expirée et l'annule.

    • Chaque transaction peut contenir jusqu'à 4 Mo de données. Le volume de données écrites 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 lui attribue automatiquement un numéro de version selon la méthode habituelle lors de l'écriture dans la transaction, et non lors de sa validation.

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

    • Lorsque vous utilisez une transaction locale, un verrou d'écriture est posé sur les données associées à la valeur de clé de partition de base de la transaction. Seules les demandes d'écriture contenant l'ID de cette transaction locale et visant à y écrire des données aboutissent. Les autres demandes non transactionnelles ou celles contenant les IDs d'autres transactions locales échouent. Les données sont déverrouillées lorsque la transaction est validée, annulée ou expire.

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

Paramètres

Paramètre

Obligatoire

Description

tableName

Oui

Le nom de la table de données.

primaryKey

Oui

La clé primaire de la table de données.

  • Vous devez spécifier une valeur de clé de partition lors de la création d'une transaction locale.

  • Vous devez spécifier les valeurs de toutes les colonnes de clé primaire lors de la lecture et de l'écriture de données dans une transaction locale.

transactionId

Oui

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

Vous devez spécifier un ID de transaction locale lors de la lecture et de l'écriture de données dans une transaction locale.

Exemples

Utiliser une transaction locale pour écrire des données et valider la transaction locale

L'exemple de code suivant montre comment créer une transaction locale basée sur une valeur de clé de partition spécifique, y écrire des données, puis valider la transaction pour appliquer toutes les modifications à la table de données :

(async () => {
    try {

        // Create a local transaction. 
        const response = await client.startLocalTransaction({
            tableName,
            primaryKey: [{  // You need to only specify the partition key value for the local transaction. 
                "id": "partitionKeyValue"
            }]
        });

        // Obtain the local transaction ID. 
        const transactionId = response.transactionId;

        // Write data in the local transaction. 
        await client.putRow({
            tableName,
            condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),
            primaryKey,
            attributeColumns: [{
                col: 'updated'
            }],
            transactionId
        });

        // Commit the local transaction. 
        await client.commitTransaction({
            transactionId
        })
    } catch (e) {
        console.error(e)
    }
})();

Utiliser une transaction locale pour écrire des données et annuler la transaction locale

L'exemple de code suivant montre comment créer une transaction locale basée sur une valeur de clé de partition spécifique, y écrire des données, puis annuler la transaction pour ignorer toutes les modifications :

(async () => {
    try {

        // Create a local transaction. 
        const response = await client.startLocalTransaction({
            tableName,
            primaryKey: [{  // You need to only specify the partition key value for the local transaction. 
                "id": "partitionKeyValue"
            }]
        });
        // Obtain the local transaction ID. 
        const transactionId = response.transactionId

        // Write data in the local transaction. 
        await client.putRow({
            tableName,
            condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),
            primaryKey,
            attributeColumns: [{
                col: 'updated'
            }],
            transactionId
        });
        // Abort the local transaction. 
        await client.abortTransaction({
            transactionId
    })
  } catch (e) {
    console.error(e)
  }
})();

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.