Partilhar via


O que são garantias ACID no Azure Databricks?

O Azure Databricks usa o Delta Lake por padrão para todas as leituras e gravações e se baseia nas garantias ACID fornecidas pelo protocolo Delta Lake de código aberto. ACID significa atomicidade, consistência, isolamento e durabilidade.

  • Atomicidade significa que todas as transações são bem-sucedidas ou falham completamente.
  • As garantias de consistência referem-se à forma como um determinado estado dos dados é observado por operações simultâneas.
  • Isolamento refere-se a como operações simultâneas potencialmente entram em conflito umas com as outras.
  • A durabilidade significa que as alterações autorizadas são permanentes.

Embora muitas tecnologias de processamento e armazenamento de dados descrevam ter transações ACID, as garantias específicas variam de acordo com o sistema, e as transações no Azure Databricks podem diferir de outros sistemas com os quais você trabalhou.

Nota

Esta página descreve as garantias para tabelas apoiadas pelo Delta Lake. Outros formatos de dados e sistemas integrados podem não fornecer garantias transacionais para leituras e gravações.

Todas as gravações do Azure Databricks no armazenamento de objetos na nuvem usam confirmações transacionais, que criam arquivos de metadados começando com _started_<id> e _committed_<id> ao lado de arquivos de dados. Você não precisa interagir com esses arquivos, pois o Azure Databricks limpa rotineiramente arquivos de metadados de confirmação obsoletos.

Como as transações são definidas no Azure Databricks?

O Azure Databricks gerencia transações no nível da tabela. As transações sempre se aplicam a uma tabela de cada vez. Para gerenciar transações simultâneas, o Azure Databricks usa o controle de simultaneidade otimista. Isso significa que não há bloqueios na leitura ou na escrita contra uma mesa, e o impasse não é uma possibilidade.

Por padrão, o Azure Databricks fornece isolamento de instantâneo em leituras e isolamento serializável de gravação em gravações. O isolamento serializável por gravação fornece garantias mais fortes do que o isolamento de instantâneo, mas aplica esse isolamento mais forte apenas para gravações.

As operações de leitura que fazem referência a várias tabelas retornam a versão atual de cada tabela no momento do acesso, mas não interrompem transações simultâneas que possam modificar tabelas referenciadas.

O Azure Databricks não tem BEGIN/END construções que permitam que várias operações sejam agrupadas como uma única transação. Os aplicativos que modificam várias tabelas confirmam transações em cada tabela de forma serial. Você pode combinar inserções, atualizações e exclusões em uma tabela em uma única transação de gravação usando MERGE INTOo .

Como o Azure Databricks implementa a atomicidade?

Os controles de log de transações confirmam a atomicidade. Durante uma transação, os arquivos de dados são gravados no diretório de arquivos que dá suporte à tabela. Quando a transação é concluída, uma nova entrada é confirmada no log de transações que inclui os caminhos para todos os arquivos gravados durante a transação. Cada confirmação incrementa a versão da tabela e torna os novos arquivos de dados visíveis para operações de leitura. O estado atual da tabela compreende todos os arquivos de dados marcados como válidos nos logs de transações.

Os arquivos de dados não são rastreados, a menos que o log de transações registre uma nova versão. Se uma transação falhar depois de gravar arquivos de dados em uma tabela, esses arquivos de dados não corromperão o estado da tabela, mas os arquivos não se tornarão parte da tabela. A VACUUM operação exclui todos os arquivos de dados não rastreados em um diretório de tabela, incluindo arquivos não confirmados restantes de transações com falha.

Como o Azure Databricks implementa durabilidade?

O Azure Databricks usa o armazenamento de objetos na nuvem para armazenar todos os arquivos de dados e logs de transações. O armazenamento de objetos na nuvem tem alta disponibilidade e durabilidade. Como as transações são bem-sucedidas ou falham completamente e o log de transações convive com arquivos de dados no armazenamento de objetos na nuvem, as tabelas no Azure Databricks herdam as garantias de durabilidade do armazenamento de objetos na nuvem no qual estão armazenadas.

Como o Azure Databricks implementa consistência?

O Delta Lake utiliza o controlo de simultaneidade otimista para fornecer garantias transacionais entre escritas. Neste mecanismo, as escritas operam em três fases:

  1. Leia: lê (se necessário) a versão mais recente disponível da tabela para identificar quais arquivos precisam ser modificados (ou seja, reescritos).
    • As gravações que são somente acréscimo não leem o estado atual da tabela antes de escrever. A validação de esquema aproveita os metadados do log de transações.
  2. Gravação: Grava arquivos de dados no diretório usado para definir a tabela.
  3. Validar e confirmar:
    • Verifica se as alterações propostas estão em conflito com quaisquer outras alterações que possam ter sido confirmadas simultaneamente desde o instantâneo lido.
    • Se não existirem conflitos, todas as alterações faseadas são consolidadas como um novo instantâneo com versões e a operação de escrita é bem-sucedida.
    • Se houver conflitos, a operação de gravação falhará com uma exceção de modificação simultânea. Esta falha evita a corrupção de dados.

A convergência otimista pressupõe que a maioria das transações simultâneas em seus dados não pode entrar em conflito entre si, mas conflitos podem ocorrer. Consulte Níveis de isolamento e conflitos de gravação no Azure Databricks.

Como o Azure Databricks implementa o isolamento?

O Azure Databricks usa isolamento serializável de gravação por padrão para todas as gravações e atualizações de tabela. O isolamento de instantâneo é usado para todas as leituras de tabela.

A serializabilidade de gravação e o controle de simultaneidade otimista trabalham juntos para fornecer alta taxa de transferência para gravações. O estado válido atual de uma tabela está sempre disponível, e uma gravação pode ser iniciada em uma tabela a qualquer momento. As leituras simultâneas são limitadas apenas pela taxa de transferência do metastore e dos recursos de nuvem.

Consulte Níveis de isolamento e conflitos de gravação no Azure Databricks.

O Delta Lake suporta transações multitabelas?

O Delta Lake não suporta transações de várias tabelas. O Delta Lake suporta transações no nível da tabela .

As relações de chave primária e chave estrangeira no Azure Databricks são informativas e não impostas. Consulte Declarar relações de chave primária e chave estrangeira.

O que significa que o Delta Lake suporta gravações multi-cluster?

O Delta Lake evita a corrupção de dados quando vários clusters gravam na mesma tabela simultaneamente. Algumas operações de gravação podem entrar em conflito durante a execução simultânea, mas não corrompem a tabela. Consulte Níveis de isolamento e conflitos de gravação no Azure Databricks.

Posso modificar uma tabela Delta de áreas de trabalho diferentes?

Sim, você pode modificar simultaneamente a mesma tabela Delta a partir de espaços de trabalho diferentes. Além disso, se um processo estiver escrevendo a partir de um espaço de trabalho, os leitores em outros espaços de trabalho verão uma exibição consistente.