O MaxCompute oferece garantias de atomicidade, consistência, isolamento e durabilidade (ACID) para jobs de escrita concorrentes. As garantias específicas variam conforme o uso de tabelas padrão ou transacionais.
Conceitos principais
|
Termo |
Definição |
|
Operação |
Um único job enviado no MaxCompute. |
|
Objeto de dados |
Objeto que armazena dados, como uma tabela não particionada ou uma partição. |
|
Job INTO |
Job SQL que contém a palavra-chave INTO, como INSERT INTO ou DYNAMIC INSERT INTO. |
|
Job OVERWRITE |
Job SQL que contém a palavra-chave OVERWRITE, como INSERT OVERWRITE ou DYNAMIC INSERT OVERWRITE. |
|
Upload de dados via Tunnel |
Um job do tipo INTO ou OVERWRITE. |
Garantias ACID
Atomicidade
Tabelas padrão
Se houver conflito entre múltiplos jobs, o MaxCompute garante o sucesso de apenas um.
As operações crie, OVERWRITE e exclua em uma única tabela ou partição têm garantia de atomicidade.
A atomicidade não é garantida em operações entre tabelas, como MULTI-INSERT.
-
Alguns casos extremos também podem não ter garantia de atomicidade:
Operação DYNAMIC INSERT OVERWRITE com mais de 10.000 partições.
Operação INTO. Se ocorrer reversão de transação, a limpeza de dados pode falhar. Os dados originais são preservados, mas resíduos do job com falha podem permanecer.
Tabelas transacionais (garantia adicional)
As operações atualize, exclua e MERGE de arquivos pequenos em tabelas não particionadas ou partições têm garantia de atomicidade. Por exemplo, se duas operações atualize forem executadas simultaneamente na mesma partição, exatamente uma terá sucesso. Execuções parciais ou sucesso duplo são impossíveis.
Consistência
Tabelas padrão
Os jobs OVERWRITE têm garantia de consistência.
Se um job INTO falhar devido a conflitos, os dados desse job podem permanecer.
Tabelas transacionais (garantia adicional)
Se um job INTO falhar devido a conflitos, nenhum dado da operação malsucedida será mantido.
Isolamento
Tabelas padrão
Para operações que não sejam INTO, o MaxCompute assegura o envio das operações de leitura.
Em operações INTO, algumas leituras podem não ser enviadas.
Tabelas transacionais (garantia adicional)
Operações INTO: o MaxCompute garante o envio das operações de leitura.
Durabilidade
O MaxCompute assegura a durabilidade dos dados para todos os tipos de tabela. Após a conclusão de uma operação, os dados modificados são persistidos permanentemente e não se perdem, mesmo em caso de falha no sistema.
Resolução de conflitos
Conflitos podem surgir quando jobs são executados simultaneamente na mesma tabela ou partição de destino. A regra de resolução é:
O job que terminar primeiro tem sucesso. O job que terminar depois pode falhar.
Exemplo
O cenário a seguir ilustra duas operações atualize na mesma partição:
t0: job_A starts (UPDATE on partition p1)
t1: job_B starts (UPDATE on partition p1)
t2: job_A commits — succeeds, partition p1 is updated
t3: job_B attempts to commit — detects that p1 changed since job_B started reading → reports a conflict error
O Job B reporta erro porque os dados lidos tornaram-se obsoletos. O resultado do Job A é preservado.
Matriz de resultados de conflitos
A tabela abaixo apresenta os resultados quando dois jobs são enviados ao mesmo tempo para a mesma tabela não particionada ou partição. "Anterior" e "posterior" referem-se à ordem de conclusão dos jobs.
|
Job concluído anteriormente |
INSERT OVERWRITE ou TRUNCATE concluído posteriormente |
INSERT INTO concluído posteriormente |
atualize ou exclua concluído posteriormente |
MERGE de arquivos pequenos concluído posteriormente |
|
INSERT OVERWRITE ou TRUNCATE |
Ambos têm sucesso. Os dados do job posterior sobrescrevem os do job anterior. |
Ambos têm sucesso. O INSERT INTO posterior anexa seus dados ao resultado do job anterior. |
O atualize ou exclua posterior reporta um erro. |
O MERGE de arquivos pequenos posterior reporta um erro. |
|
INSERT INTO |
Ambos têm sucesso. Os dados OVERWRITE posteriores sobrescrevem o resultado do INSERT INTO anterior. |
Ambos têm sucesso. O INSERT INTO posterior anexa seus dados ao resultado anterior. |
O atualize ou exclua posterior reporta um erro. |
O MERGE de arquivos pequenos posterior reporta um erro. |
|
atualize ou exclua |
Ambos têm sucesso. Os dados OVERWRITE posteriores sobrescrevem o resultado do atualize ou exclua anterior. |
Ambos têm sucesso. O INSERT INTO posterior anexa seus dados ao resultado anterior. |
O atualize ou exclua posterior reporta um erro. |
O MERGE de arquivos pequenos posterior reporta um erro. |
|
MERGE de arquivos pequenos |
Ambos têm sucesso. Os dados OVERWRITE posteriores sobrescrevem o resultado do MERGE anterior. |
Ambos têm sucesso. O INSERT INTO posterior anexa seus dados ao resultado anterior. |
O atualize ou exclua posterior reporta um erro. |
O MERGE de arquivos pequenos posterior reporta um erro. |
Regras gerais
Operações INSERT (OVERWRITE e INTO) nunca entram em conflito entre si. Dois jobs INSERT sempre obtêm sucesso, independentemente da ordem.
atualize, exclua e MERGE de arquivos pequenos falham se os dados-alvo forem alterados. Se a tabela não particionada ou partição de destino tiver sido modificada por um job anterior, o atualize, exclua ou MERGE de arquivos pequenos subsequente reportará um erro de conflito.
Em situações extremas em que múltiplos jobs execute simultaneamente durante atualizações de metadados, erros de conflito decorrentes dessas alterações também podem ocorrer.