Todos os produtos
Search
Central de documentação

Tablestore:Configure transação local

Última atualização: Jul 03, 2026

Após ativar o recurso de transação local em uma tabela de dados, crie uma transação local com base em um valor de chave de partição específico para executar operações de leitura e gravação nos dados dessa transação. Esse recurso permite realizar operações atômicas de leitura e gravação em uma ou mais linhas.

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.

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

    Chame as operações GetRow, PutRow, DeleteRow, UpdateRow, BatchWriteRow e GetRange para manipular os dados na transação local.

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

Observações de uso

  • Os recursos de coluna de chave primária com incremento automático e transação local não podem ser usados simultaneamente.

  • O bloqueio pessimista controla operações simultâneas em uma transação local.

  • A validade máxima de uma transação local é de 60 segundos.

    Se a transação não for confirmada ou cancelada dentro desse período, o servidor do Tablestore considera que houve timeout e encerra a transação automaticamente.

  • Mesmo que ocorra um erro de timeout, a transação pode ter sido criada no servidor do Tablestore. Nessa situação, reenvie a solicitação de criação após o timeout da transação criada anteriormente.

  • Transações locais não confirmadas podem perder a validade. Caso isso ocorra, tente repetir as operações dessa transação.

  • Sem operações de gravação nos dados da transação local, as operações de confirmação e cancelamento produzem o mesmo efeito.

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

    • O ID da transação local não permite acessar dados fora do intervalo definido pelo valor da chave de partição usado na criação da transação.

    • Todas as solicitações de gravação na mesma transação devem usar o mesmo valor de chave de partição da criação da transação. Essa restrição não se aplica a solicitações de leitura.

    • Apenas uma solicitação pode usar a transação local por vez. Enquanto estiver em uso, outras operações com o mesmo ID de transação local falharão.

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

      Se nenhuma operação de leitura ou gravação ocorrer por mais de 60 segundos, o servidor do Tablestore considerará que a transação expirou e a cancelará.

    • Cada transação aceita até 4 MB de dados gravados. O cálculo do volume de dados segue o mesmo método de uma solicitação de gravação comum.

    • Sem a especificação de um número de versão para uma célula, o servidor do Tablestore atribui automaticamente esse número no momento da gravação na transação, e não durante a confirmação.

    • Solicitações BatchWriteRow com ID de transação local só podem gravar linhas na tabela correspondente a esse ID.

    • Ao usar uma transação local, um bloqueio de gravação é aplicado aos dados do valor da chave de partição associado à transação. Somente solicitações de gravação contendo o ID correto da transação local serão bem-sucedidas. Outras solicitações não transacionais ou com IDs diferentes falharão. Os dados são desbloqueados quando a transação é confirmada, cancelada ou expira.

    • A transação local permanece válida mesmo se uma solicitação de leitura ou gravação com seu ID for rejeitada. Defina uma regra de nova tentativa para reenviar a solicitação ou cancele 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. O comando desc da CLI exporta o esquema da tabela, mas não inclui o atributo de transação local.

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

Sem acesso à operação DescribeTable, verifique se setLocalTxnEnabled(true) foi chamado no código de criação da tabela ou envie um ticket para confirmar a ativação prévia desse recurso.

Operações de API

Esta seção descreve as seguintes operações de API relacionadas ao recurso de transação local: startLocalTransaction, commitTransaction e 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)

Parâmetros

Parâmetro

Descrição

table_name

Nome da tabela de dados.

key

Chave de partição da tabela de dados.

Especifique um valor de chave de partição ao criar uma transação local.

primary_key

Chave primária da tabela de dados.

Defina os valores de todas as colunas da chave primária durante a leitura e gravação de dados em uma transação local.

transaction_id

ID que identifica exclusivamente a transação local.

Informe o ID da transação local para ler e gravar dados dentro dela.

Exemplos

Usar o recurso de transação local para gravar uma linha de dados

Neste exemplo, uma linha de dados é gravada em uma transação local criada para uma chave de partição específica de uma tabela e, em seguida, a transação é confirmada.

// 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']
// ));

Usar o recurso de transação local para ler uma linha de dados

Este exemplo demonstra a leitura de uma linha de dados em uma transação local criada para uma chave de partição específica de uma tabela.

// 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']
// ));

Referências

Para gravar várias linhas de dados simultaneamente ou ler dados cujos valores de chave primária estejam em 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.