Quando vários jobs gravam na mesma tabela Delta simultaneamente, você precisa entender quais combinações de operações geram conflitos, como o MaxCompute os resolve e como projetar seus pipelines para evitá-los. O MaxCompute usa o MetaService para gerenciar todas as operações de modificação de dados em tabelas Delta como transações. O controle de concorrência multiversão (MVCC) isola operações simultâneas de leitura e gravação em snapshots, enquanto o controle de concorrência otimista (OCC) gerencia a concorrência entre transações.
Regras de detecção de conflitos
A tabela a seguir mostra como o MaxCompute resolve conflitos entre jobs simultâneos na mesma tabela não particionada ou partição. O job que termina primeiro é o job anterior; o que termina depois é o job posterior.
|
Job anterior |
Job posterior |
Resultado |
|
INSERT OVERWRITE / TRUNCATE |
INSERT OVERWRITE / TRUNCATE |
Ambos têm êxito. O resultado do job posterior substitui o do job anterior. |
|
INSERT OVERWRITE / TRUNCATE |
INSERT INTO |
O job anterior tem êxito. O job posterior falha. |
|
INSERT OVERWRITE / TRUNCATE |
UPDATE / DELETE |
O job anterior tem êxito. O job posterior falha. |
|
INSERT OVERWRITE / TRUNCATE |
MINOR COMPACT |
O job anterior tem êxito. O job posterior falha. |
|
INSERT OVERWRITE / TRUNCATE |
MAJOR COMPACT |
O job anterior tem êxito. O job posterior falha. |
|
INSERT INTO |
INSERT OVERWRITE / TRUNCATE |
Ambos têm êxito. O resultado do job posterior substitui o do job anterior. |
|
INSERT INTO |
INSERT INTO |
O job anterior tem êxito. O job posterior falha. |
|
INSERT INTO |
UPDATE / DELETE |
O job anterior tem êxito. O job posterior falha. |
|
INSERT INTO |
MINOR COMPACT |
Ambos têm êxito. A compactação do job posterior é concluída. |
|
INSERT INTO |
MAJOR COMPACT |
O job anterior tem êxito. O job posterior falha. |
|
UPDATE / DELETE |
INSERT OVERWRITE / TRUNCATE |
Ambos têm êxito. O resultado do job posterior substitui o do job anterior. |
|
UPDATE / DELETE |
INSERT INTO |
O job anterior tem êxito. O job posterior falha. |
|
UPDATE / DELETE |
UPDATE / DELETE |
O job anterior tem êxito. O job posterior falha. |
|
UPDATE / DELETE |
MINOR COMPACT |
Ambos têm êxito. A compactação do job posterior é concluída. |
|
UPDATE / DELETE |
MAJOR COMPACT |
O job anterior tem êxito. O job posterior falha. |
|
MINOR COMPACT |
INSERT OVERWRITE / TRUNCATE |
Ambos têm êxito. O resultado do job posterior substitui o do job anterior. |
|
MINOR COMPACT |
INSERT INTO |
Ambos têm êxito. Os novos dados do job posterior são gravados. |
|
MINOR COMPACT |
UPDATE / DELETE |
Ambos têm êxito. Os novos dados do job posterior são gravados. |
|
MINOR COMPACT |
MINOR COMPACT |
O job anterior tem êxito. O job posterior falha. |
|
MINOR COMPACT |
MAJOR COMPACT |
Ambos têm êxito. A compactação do job posterior é concluída. |
|
MAJOR COMPACT |
INSERT OVERWRITE / TRUNCATE |
Ambos têm êxito. O resultado do job posterior substitui o do job anterior. |
|
MAJOR COMPACT |
INSERT INTO |
Ambos têm êxito. Os novos dados do job posterior são gravados. |
|
MAJOR COMPACT |
UPDATE / DELETE |
Ambos têm êxito. Os novos dados do job posterior são gravados. |
|
MAJOR COMPACT |
MINOR COMPACT |
O job anterior tem êxito. O job posterior falha. |
|
MAJOR COMPACT |
MAJOR COMPACT |
O job anterior tem êxito. O job posterior falha. |
Essas regras se aplicam no nível da transação, não no nível de linha ou arquivo.
Otimização de conflitos de concorrência
O MaxCompute otimiza o tratamento de conflitos para combinações comuns de operações. Isso reduz falhas desnecessárias e preserva a integridade dos dados.
A otimização de conflitos de concorrência aplica-se apenas ao gerenciamento de transações de tabela única.
Resolução inteligente de conflitos
Nem todas as transações sobrepostas entram em conflito. Por exemplo, quando uma operação de clustering e uma operação INSERT INTO se sobrepõem nos horários de início e commit, ambas têm êxito. O clustering reorganiza o layout físico dos dados sem alterar seu estado lógico. Portanto, não causa inconsistência de estado com uma gravação simultânea. O MaxCompute detecta esse cenário e permite que ambas as operações prossigam. A lógica de tratamento de conflitos de transação continuará sendo otimizada para atender a mais cenários.
Nova tentativa no nível de metadados
Se a detecção de conflitos falhar, o MaxCompute tentará novamente no nível de metadados. Não é necessário ler ou gravar os dados novamente. Isso reduz o consumo de recursos em comparação à reexecução completa do job.
Atualizações atômicas de metadados
Os metadados são atualizados atomicamente para garantir a consistência dos dados.
Gerenciamento de versão de arquivos de dados
Cada transação gera um lote de novos arquivos de dados associados a dois tipos de versão:
|
Tipo de versão |
Tipo de dado |
Gerada quando |
Utilizada para |
|
Versão temporal |
TIMESTAMP |
Operações acionadas pelo usuário que alteram apenas a lógica dos dados. Clustering e compactação não geram nova versão temporal. |
Consultas incrementais por tempo. Arquivos provenientes de clustering e compactação são excluídos. |
|
Versão ID |
Inteiro autoincremental |
Toda operação de dados em uma transação, incluindo clustering e compactação. |
Gerenciamento interno de transações (principal). Também disponível para consultas incrementais. |