Quais são as garantias ACID no Databricks?
O 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 a como um determinado estado dos dados é observado por operações simultâneas.
Isolamento refere-se a como as operações simultâneas potencialmente entram em conflito umas com as outras.
Durabilidade significa que as mudanças confirmadas são permanentes.
Muitas tecnologias de tratamento e armazenamento de dados afirmam ter transações ACID, mas as garantias específicas variam por sistema, e as transações no Databricks podem diferir de outros sistemas com os quais você trabalhou.
Observação
Esta página descreve garantias para tabelas apoiadas pelo Delta Lake. Outros formatos de dados e sistemas integrados podem não oferecer garantias transacionais para leituras e gravações.
Todas as gravações do Databricks no armazenamento de objetos na nuvem usam commits transacionais, que criam arquivos de metadados que começam com _started_<id>
e _committed_<id>
junto com os arquivos de dados. Você não precisa interagir com esses arquivos, pois o Databricks limpa regularmente os arquivos de metadados de commit obsoletos.
Como as transações são definidas no Databricks?
Os Databricks gerenciam transações no nível da tabela. As transações sempre se aplicam a uma tabela de cada vez. Para gerenciar transações concorrentes, o Databricks utiliza o controle de concorrência otimista. Isso significa que não há bloqueios na leitura ou escrita contra uma mesa, e o impasse não é uma possibilidade.
Por default, o Databricks fornece isolamento Snapshot em leituras e isolamento serializável por gravação em gravações. O isolamento serializável por gravação fornece garantias mais fortes do que o isolamento Snapshot , mas aplica esse isolamento mais forte apenas para gravações.
As operações de leitura que referenciam 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 as tabelas referenciadas.
O Databricks não tem BEGIN/END
construções que permitem que múltiplas operações sejam agrupadas como uma única transação. Aplicativos que modificam várias tabelas comprometem transações para cada tabela de forma serial. Você pode combinar inserções, atualizações e exclusões em uma tabela em uma única transação escrita usando o MERGE INTO
.
Como os Databricks implementam a atomicidade?
Os controles do registro de transações commit 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 é registrada no log de transação que inclui os caminhos para todos os arquivos escritos 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 inclui 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 após gravar os 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 operação VACUUM
exclui todos os arquivos de dados não rastreados em um diretório de tabela, inclusive os arquivos restantes não confirmados de transações com falha.
Como o Databricks implementa a durabilidade?
A Databricks usa o armazenamento de objetos em nuvem para armazenar todos os arquivos de dados e logs de transações. O armazenamento de objetos em nuvem tem alta disponibilidade e durabilidade. Como as transações são bem-sucedidas ou falham completamente, e os logs de transação convivem com os arquivos de dados no armazenamento de objetos na nuvem, as tabelas no Databricks herdam as garantias de durabilidade do armazenamento de objetos na nuvem em que estão armazenadas.
Como o Databricks implementa a consistência?
Delta Lake usa controle de simultaneidade otimista para fornecer garantias transacionais entre gravações. Sob este mecanismo, as gravações operam em três estágios:
Ler: lê (caso necessário) a edição mais atual da tabela para determinar quais arquivos devem ser alterados (isto é, reescritos).
As gravações somente anexadas não leem o estado atual da tabela antes de gravar. A validação do esquema aproveita os metadados do log de transações.
Gravar: grava arquivos de dados no diretório usado para definir a tabela.
Validar e confirmar:
Verifica se as alterações propostas entram em conflito com quaisquer outras mudanças que possam ter sido registradas simultaneamente desde o snapshot que foi lido.
Se não houver conflitos, todas as alterações em etapas serão confirmadas como um novo snapshot versionado e a operação de gravação será bem-sucedida.
Se houver conflitos, a operação de escrita falha com uma exceção de modificação concorrente.Essa falha evita a corrupção de dados.
A concorrência otimista pressupõe que a maioria das transações simultâneas em seus dados não entraria em conflito entre si, mas conflitos podem ocorrer.Consulte Níveis de isolamento e conflitos de gravação no Databricks.
Como o Databricks implementa o isolamento?
O Databricks usa isolamento serializáveis de gravação por padrão para todas as gravações e atualizações de tabelas. O isolamento de instantâneos é usado para todas as leituras de tabelas.
A serializabilidade de gravação e o controle de simultaneidade otimista trabalham juntos para fornecer alta taxa de transferência para gravações. A condição atual e válida de uma tabela encontra-se constantemente acessível, e um registro pode ser efetuado na tabela em qualquer instante.As leituras simultâneas são limitadas apenas pela capacidade de processamento do metastore e dos recursos em nuvem.
Consulte "Níveis de isolamento e conflitos de gravação no Databricks".
O Delta Lake oferece suporte a transações de várias tabelas?
O Delta Lake não oferece suporte para transações de múltiplas tabelas. O Delta Lake suporta transações no nível da mesa.
As relações key primária e key estrangeira em Databricks são informativas e não impostas. Consulte Declarar relacionamentos key primária e key estrangeira.
O que significa que o Delta Lake oferece suporte a gravações em vários clusters?
O Delta Lake impede a corrupção de dados quando vários clusters escrevem na mesma tabela de forma simultânea. 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 Databricks.
Observação
O Delta Lake no S3 possui diversas limitações que não são encontradas em outros sistemas de armazenamento. Consulte Limitações do Delta Lake no S3.