Qual é a diferença entre um banco de dados ACID e um BASE?

ACID e BASE são modelos de transação de banco de dados que determinam como um banco de dados organiza e manipula dados. No contexto de bancos de dados, uma transação é qualquer operação que o banco de dados considere uma única unidade de trabalho. Uma transação deve ser totalmente concluída para que o banco de dados permaneça consistente. Por exemplo, quando você transfere dinheiro de uma conta bancária para outra, o dinheiro deve sair da sua conta e ser adicionado à conta de terceiros. Você não pode concluir a transação sem que as duas etapas ocorram. 

Os bancos de dados ACID priorizam a consistência em detrimento da disponibilidade: toda a transação falhará se ocorrer um erro em qualquer etapa dela. Em contraste, os bancos de dados BASE priorizam a disponibilidade em vez da consistência. Em vez de falhar na transação, os usuários podem acessar dados inconsistentes temporariamente. A consistência de dados é alcançada, mas não imediatamente.

Por que ACID e BASE são importantes?

Os bancos de dados modernos são armazenamentos de dados distribuídos que replicam dados em vários nós conectados por uma rede. Eles permitem que os usuários realizem várias manipulações de dados, como leituras e gravações, em uma única transação. Os usuários esperam que os dados permaneçam consistentes em todos os nós ao final da transação. No entanto, na ciência da computação teórica, o teorema de Brewer (também chamado de teorema CAP) afirma que qualquer armazenamento de dados distribuído pode fornecer apenas duas das três garantias a seguir:

  • Consistência: cada operação de leitura recebe os dados atualizados mais recentemente ou um erro.
  • Disponibilidade: cada solicitação de banco de dados recebe uma resposta bem-sucedida, sem garantir que contenha os dados atualizados mais recentemente.
  • Tolerância à partição: o sistema continua operando apesar das mensagens perdidas ou atrasadas entre os nós distribuídos.

Por exemplo, se um cliente adiciona um item a um carrinho em um site de comércio eletrônico, todos os outros clientes devem ver os níveis de estoque do produto caírem. Se o cliente adicionar o último item ao carrinho, todos os outros usuários deverão ver o item como esgotado. Caso alguma operação falhe em uma transação, os designers do banco de dados devem fazer uma escolha. O banco de dados pode fazer o seguinte:

  1. Cancele a transação e retorne um erro, diminuindo a disponibilidade, mas garantindo a consistência. O cliente não pode adicionar o item ao carrinho ou outros clientes não podem carregar os detalhes de todos os produtos até que a adição ao carrinho seja bem-sucedida.
  2. Prossiga com a operação e, assim, forneça disponibilidade, mas corra o risco de inconsistência. O cliente adiciona um item ao carrinho, mas outros clientes veem níveis de estoque incorretos, pelo menos temporariamente.

Em alguns casos de uso, a consistência é fundamental e os bancos de dados ACID são favorecidos. No entanto, há outros casos de uso em que isso não é crítico. Por exemplo, quando você aceita uma solicitação de amizade nas redes sociais, não importa se outros usuários veem temporariamente um número incorreto de amigos em seu perfil de mídia social. No entanto, você não quer perder o acesso ao seu feed de mídia social enquanto os dados são classificados. Em tais cenários, o BASE se torna importante.

Princípios chave: ACID comparado com BASE

ACID e BASE são acrônimos para diferentes propriedades do banco de dados que representam como o banco de dados se comporta durante o processamento de transações on-line. 

ACID 

ACID significa atomicidade, consistência, isolamento e durabilidade.

Atomicidade

A atomicidade garante que todas as etapas em uma única transação de banco de dados sejam totalmente concluídas ou revertidas ao estado original. Por exemplo, em um sistema de reservas, ambas as tarefas — reservar assentos e atualizar os detalhes do cliente — devem ser concluídas em uma única transação. Você não pode ter assentos reservados para um perfil de cliente incompleto. Nenhuma alteração será feita nos dados se alguma parte da transação falhar.

Consistência

A consistência garante que os dados atendam às restrições de integridade e às regras de negócios predefinidas. Mesmo que vários usuários realizem operações semelhantes simultaneamente, os dados permanecem consistentes para todos. Por exemplo, a consistência garante que, ao transferir fundos de uma conta para outra, o saldo total antes e depois da transação permaneça o mesmo. Se a Conta A tiver USD 200 e a Conta B tiver USD 400, o saldo total será de USD 600. Depois que A transfere USD 100 para B, A tem USD 100 e B tem USD 500. O saldo total ainda é de USD 600. 

Isolamento

O isolamento garante que uma nova transação, acessando um registro específico, espere até que a transação anterior termine antes de iniciar a operação. Ele garante que as transações simultâneas não interfiram entre si, mantendo a ilusão de que estão sendo executadas em série. Por outro exemplo, é um sistema de gerenciamento de inventário multiusuário. Se um usuário atualizar a quantidade de um produto, outro usuário acessando as mesmas informações do produto terá uma visão consistente e isolada dos dados, não afetada pela atualização em andamento até que ela seja confirmada.

Durabilidade

A durabilidade garante que o banco de dados mantenha todos os registros confirmados, mesmo se o sistema apresentar falhas. Ele garante que, quando as transações ACID são confirmadas, todas as alterações são permanentes e não são afetadas por falhas subsequentes do sistema. Por exemplo, em uma aplicação de mensagens, quando um usuário envia uma mensagem e recebe uma confirmação de entrega bem-sucedida, a propriedade de durabilidade garante que a mensagem nunca seja perdida. Isso permanece verdadeiro mesmo se a aplicação ou o servidor encontrar uma falha.

BASE

BASE significa basicamente disponível, estado flexível e, eventualmente, consistente. A sigla destaca que BASE é o oposto de ACID, como seus equivalentes químicos.

Basicamente disponível

Basicamente disponível é a acessibilidade simultânea do banco de dados pelos usuários em todos os momentos. Um usuário não precisa esperar que outros concluam a transação antes de atualizar o registro. Por exemplo, durante um aumento repentino no tráfego em uma plataforma de comércio eletrônico, o sistema pode priorizar a veiculação de listagens de produtos e a aceitação de pedidos. Mesmo que haja um pequeno atraso na atualização das quantidades de estoque, os usuários continuam fazendo o check-out dos itens.

Estado flexível

O estado flexível se refere à noção de que os dados podem ter estados transitórios ou temporários que podem mudar com o tempo, mesmo sem acionadores ou entradas externas. Ele descreve o estado de transição do registro quando várias aplicações o atualizam simultaneamente. O valor do registro é finalmente finalizado somente após a conclusão de todas as transações. Por exemplo, se os usuários editarem uma publicação nas redes sociais, a alteração pode não ser visível para outros usuários imediatamente. No entanto, mais tarde, a postagem é atualizada sozinha (refletindo a alteração mais antiga), mesmo que nenhum usuário a tenha acionado.

Leitura eventualmente consistente

Eventualmente consistente significa que o registro alcançará consistência quando todas as atualizações simultâneas forem concluídas. Nesse ponto, as aplicações que consultam o registro verão o mesmo valor. Por exemplo, considere um sistema distribuído de edição de documentos em que vários usuários possam editar um documento simultaneamente. Se o Usuário A e o Usuário B editarem a mesma seção do documento simultaneamente, suas cópias locais poderão diferir temporariamente até que as alterações sejam propagadas e sincronizadas. No entanto, com o tempo, o sistema garante uma consistência eventual ao propagar e mesclar as alterações feitas por diferentes usuários.

Principais diferenças: ACID em comparação com BASE

Há vantagens e desvantagens ao escolher entre os modelos de transação de banco de dados ACID e BASE.

Escala

É mais difícil escalar um modelo de transação de banco de dados ACID porque ele se concentra na consistência. Somente uma transação é permitida para qualquer registro a qualquer momento, o que torna o dimensionamento horizontal mais desafiador. 

Como alternativa, você pode escalar o modelo de banco de dados BASE horizontalmente, pois ele não precisa manter uma consistência estrita. A adição de vários nós ao cluster do banco de dados permite que o modelo BASE melhore sua disponibilidade de dados, que é o princípio que impulsiona a arquitetura do banco de dados. 

Flexibilidade

Os bancos de dados ACID são menos flexíveis ao lidar com dados. Ele deve garantir consistência imediata. Um banco de dados ACID pode restringir o acesso a algumas aplicações se houver quedas de rede ou de energia. Da mesma forma, as aplicações devem aguardar sua vez de atualizar os dados se outros módulos de software estiverem processando um registro específico. Por outro lado, os bancos de dados BASE são mais flexíveis. Em vez de impor restrições estritas, o BASE permite que as aplicações modifiquem registros quando eles estiverem disponíveis. 

Performance

Um banco de dados ACID pode ter problemas de performance ao lidar com grandes volumes de dados ou solicitações de processamento simultâneas. Como os dados são processados em uma ordem estrita, a sobrecarga em cada transação cria atrasos que afetam todas as aplicações que acessam o registro. 

Por outro lado, as aplicações que acessam um banco de dados BASE podem processar os registros a qualquer momento. Isso reduz o tempo de espera excessivo e melhora o throughput do banco de dados.

Sincronização

Um banco de dados ACID precisa de um mecanismo de sincronização para confirmar as alterações de uma transação e refleti-las em todos os registros associados. Ao mesmo tempo, ele deve bloquear o registro específico de outras partes até que a transação seja concluída ou descartada. Enquanto isso, um banco de dados BASE é executado sem bloquear os registros, sincronizando-os eventualmente sem garantias de tempo. Ao trabalhar com bancos de dados BASE, os desenvolvedores sabem que pode haver inconsistências ao processar determinados registros e tomam as precauções necessárias na aplicação. 

Quando usar: ACID comparado com BASE

Apesar de suas diferenças, os sistemas de banco de dados ACID e BASE são relevantes em diferentes aplicações. O ACID é a opção ideal para aplicações empresariais que exigem consistência, confiabilidade e previsibilidade de dados. Por exemplo, os bancos usam um banco de dados ACID para armazenar transações de clientes porque a integridade dos dados é a principal prioridade. Enquanto isso, os bancos de dados BASE são a melhor opção para o processamento analítico on-line de dados menos estruturados e de alto volume. Por exemplo, sites de comércio eletrônico usam bancos de dados BASE para atualizar os preços dos produtos, que mudam com frequência. Nesse caso, a precisão dos preços é menos importante do que permitir que todos os clientes tenham acesso em tempo real ao preço do produto.

Um banco de dados pode ser tanto ACID quanto BASE?

De acordo com o teorema CAP, um banco de dados pode satisfazer duas das três garantias de consistência, disponibilidade e tolerância à partição. Os modelos de banco de dados ACID e BASE oferecem tolerância à partição, o que significa que eles não podem ser altamente consistentes e estar sempre disponíveis. Portanto, um banco de dados se inclina para ACID ou BASE, mas não pode ser ambos. Por exemplo, os bancos de dados SQL são estruturados no modelo ACID, enquanto os bancos de dados NoSQL usam a arquitetura BASE. No entanto, alguns bancos de dados NoSQL podem exibir certas características ACID, mas não podem operar como bancos de dados compatíveis com ACID. 

Resumo das diferenças: ACID em comparação com BASE

 

ACID

BASE

Escala

Escala verticalmente.

Escala horizontalmente.

Flexibilidade

Menos flexível. Bloqueia registros específicos de outras aplicações durante o processamento. 

Mais flexível. Permite que várias aplicações atualizem o mesmo registro simultaneamente.

Performance

A performance diminui ao processar grandes volumes de dados.

Capaz de lidar com dados grandes e não estruturados com alto throughput. 

Sincronização

Sim. Adiciona atraso na sincronização. 

Sem sincronização no nível do banco de dados. 

Como a AWS pode oferecer suporte aos seus requisitos de banco de dados ACID e BASE?

Os bancos de dados da Nuvem AWS fornecem uma variedade de serviços de banco de dados ACID e BASE para cada tipo de caso de uso de dados. As organizações implantam seus bancos de dados na AWS para economizar tempo no provisionamento, na escalabilidade e no gerenciamento da infraestrutura de armazenamento de dados. Por exemplo:

  • O Amazon DynamoDB é um serviço rápido de banco de dados BASE que permite o processamento de dados em milissegundos para aplicações em nuvem.
  • O Amazon MemoryDB para Redis é outro banco de dados BASE que permite aos desenvolvedores implantar bancos de dados Redis duráveis e de alta disponibilidade para aplicações móveis e da Web.
  • O AWS RedShift é um data warehouse em nuvem ACID que permite executar consultas analíticas SQL complexas para casos de uso de inteligência de negócios. 

Comece a usar os bancos de dados ACID e BASE criando uma conta hoje mesmo.