Todos os produtos
Search
Central de documentação

Tablestore:Transação local

Última atualização: Jun 23, 2026

Após ativar o recurso de transação local para uma tabela de dados, você pode criar uma transação local com base no valor da chave de partição especificado e realizar operações de leitura e gravação nos dados da transação local. O recurso de transação local permite realizar operações atômicas de leitura e gravação em uma ou mais linhas.

A transação local garante que as operações em dados que compartilham a mesma chave de partição sejam todas bem-sucedidas ou todas falhem. O nível de isolamento da transação local é Read Committed.

Pré-requisitos

Usar o recurso de transação local

  1. Use startLocalTransaction para criar uma transação local com base no valor da chave de partição especificado e obter o ID da transação local.

  2. Leia e grave dados na transação local.

    Você pode chamar as operações GetRow, PutRow, DeleteRow, UpdateRow, BatchWriteRow e GetRange para realizar operações nos dados da transação local.

  3. Use commitTransaction para confirmar a transação local ou abortTransaction para abortá-la.

Notas de uso

  • Não é possível usar o recurso de coluna de chave primária com autoincremento e o recurso de transação local ao mesmo tempo.

  • O bloqueio pessimista controla as operações concorrentes em uma transação local.

  • O período de validade de uma transação local é de até 60 segundos.

    Se uma transação local não for confirmada ou abortada em 60 segundos, o servidor do Tablestore determina que a transação expirou e a aborta.

  • Uma transação pode ser criada no servidor do Tablestore mesmo que um erro de timeout seja retornado. Nesse caso, você pode reenviar uma solicitação de criação de transação após a transação criada expirar.

  • Se uma transação local não for confirmada, ela pode se tornar inválida. Nesse caso, repita as operações nessa transação.

  • Se nenhuma operação de gravação for realizada nos dados de uma transação local, as operações de confirmação e cancelamento terão o mesmo efeito.

  • O Tablestore impõe os seguintes limites para operações de leitura e gravação nos dados de uma transação local:

    • O ID da transação local não pode ser usado para acessar dados fora do intervalo especificado com base no valor da chave de partição usado para criar a transação.

    • Os valores da chave de partição de todas as solicitações de gravação na mesma transação devem ser iguais ao valor da chave de partição usado para criar a transação. Esse limite não se aplica a solicitações de leitura.

    • Uma transação local pode ser usada por apenas uma solicitação por vez. Enquanto a transação local está em uso, outras operações que usam o mesmo ID de transação local falham.

    • O intervalo máximo entre duas operações consecutivas de leitura ou gravação nos dados de uma transação local é de 60 segundos.

      Se nenhuma operação de leitura ou gravação for realizada nos dados de uma transação local por mais de 60 segundos, o servidor do Tablestore determina que a transação expirou e a aborta.

    • Cada transação permite gravar até 4 MB de dados. O volume de dados gravados em cada transação é calculado da mesma forma que uma solicitação de gravação regular.

    • Se você não especificar um número de versão para uma célula, o servidor do Tablestore atribui automaticamente um número de versão à célula da forma habitual quando a célula é gravada na transação, e não quando a transação é confirmada.

    • Se uma solicitação BatchWriteRow incluir um ID de transação local, todas as linhas na solicitação só poderão ser gravadas na tabela que corresponde ao ID da transação local.

    • Ao usar uma transação local, um bloqueio de gravação é adicionado aos dados do valor da chave de partição com base no qual a transação local foi criada. Somente solicitações de gravação que contêm o ID da transação local e são iniciadas para gravar dados na transação local podem ser bem-sucedidas. Outras solicitações não transacionais ou solicitações de gravação que contêm IDs de outras transações locais e são iniciadas para gravar dados na transação local falham. Os dados na transação local são desbloqueados quando a transação é confirmada, abortada ou quando expira.

    • Uma transação local permanece válida mesmo que uma solicitação de leitura ou gravação com o ID da transação local seja rejeitada. Especifique uma regra de repetição para reenviar a solicitação ou aborte a transação.

Como verificar se as transações locais estão ativadas para uma tabela de dados?

O console do Tablestore não exibe o status de transação local de uma tabela de dados. O comando desc da CLI exporta o schema da tabela, mas não inclui o atributo de transação local.

Para confirmar se as transações locais estão ativadas para uma tabela de dados, use um SDK para chamar a operação DescribeTable. A resposta inclui os metadados completos da tabela, incluindo o status de transação local.

Se você não tiver acesso à operação DescribeTable, verifique se setLocalTxnEnabled(true) foi chamado no código usado para criar a tabela de dados, ou envie um ticket para confirmar se esse recurso foi ativado anteriormente.

Parâmetros

Parâmetro

Obrigatório

Descrição

tableName

Sim

O nome da tabela de dados.

primaryKey

Sim

A chave primária da tabela de dados.

  • Você deve especificar um valor de chave de partição ao criar uma transação local.

  • Você deve especificar os valores de todas as colunas de chave primária ao ler e gravar dados em uma transação local.

transactionId

Sim

O ID da transação local que identifica exclusivamente uma transação local.

Você deve especificar um ID de transação local ao ler e gravar dados em uma transação local.

Exemplos

Usar uma transação local para gravar dados e confirmar a transação local

O exemplo de código a seguir demonstra como criar uma transação local com base em um valor de chave de partição específico, gravar dados na transação local e confirmar a transação local para aplicar todas as modificações de dados à tabela de dados:

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

Usar uma transação local para gravar dados e abortar a transação local

O exemplo de código a seguir demonstra como criar uma transação local com base em um valor de chave de partição específico, gravar dados na transação local e abortar a transação local para descartar todas as modificações de dados:

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

Referências

Para gravar várias linhas de dados ao mesmo tempo ou ler dados cujos valores de chave primária estejam dentro de um intervalo específico, crie uma transação local. Em seguida, consulte o código de exemplo fornecido no tópico Gravar dados ou Ler dados para iniciar uma solicitação que inclua o ID da transação local.