Vídeo: SQL vs. Hadoop: Acid vs. Base 2024
Uma marca registrada dos sistemas de banco de dados relacionais é algo conhecido como conformidade ACID. Como você pode ter adivinhado, o ACID é um acrônimo - as letras individuais, destinadas a descrever uma característica das transações de banco de dados individuais, podem ser expandidas conforme descrito nesta lista:
-
Atomicidade: A transação do banco de dados deve ser completamente ter sucesso ou falhar completamente. O sucesso parcial não é permitido.
-
Consistência: Durante a transação do banco de dados, o RDBMS progride de um estado válido para outro. O estado nunca é inválido.
-
Isolamento: A transação do banco de dados do cliente deve ocorrer isoladamente de outros clientes que tentam negociar com o RDBMS.
-
Durabilidade: A operação de dados que fazia parte da transação deve ser refletida em armazenamento não volátil (memória do computador que pode recuperar informações armazenadas mesmo quando não é alimentado - como um disco rígido) e persistir após a transação foi concluída com êxito. As falhas de transação não podem deixar os dados em um estado parcialmente comprometido.
Certos casos de uso para RDBMSs, como o processamento de transações on-line, dependem de transações compatíveis com ACID entre o cliente e o RDBMS para que o sistema funcione corretamente. Um ótimo exemplo de uma transação compatível com ACID é uma transferência de fundos de uma conta bancária para outra.
Isso se divide em duas transações de banco de dados, onde a conta de origem mostra uma retirada e a conta de destino mostra um depósito. Obviamente, essas duas transações devem ser vinculadas para serem válidas para que, se uma delas falhar, toda a operação deve deixar de garantir que ambos os saldos permaneçam válidos.
O próprio Hadoop não tem conceito de transações (ou mesmo registros, para esse assunto), portanto, claramente, não é um sistema compatível com ACID. Pensando mais especificamente em projetos de armazenamento e processamento de dados em todo o ecossistema Hadoop, nenhum deles é totalmente compatível com ACID. No entanto, eles fazem refletem propriedades que você vê em lojas de dados NoSQL, então há algum precedente para a abordagem Hadoop.
Um conceito chave por trás das lojas de dados NoSQL é que nem todas as aplicações realmente precisam de transações compatíveis com ACID. Relaxar em certas propriedades ACID (e se afastar do modelo relacional) abriu uma série de possibilidades, que permitiram que algumas lojas de dados NoSQL alcançassem escalabilidade maciça e desempenho para seus aplicativos de nicho.
Considerando que o ACID define as principais características necessárias para o processamento de transações confiáveis, o mundo NoSQL requer características diferentes para permitir flexibilidade e escalabilidade.Essas características opostas são inteligentemente capturadas na sigla BASE:
-
B asically A vailable: O sistema está garantido para estar disponível para consulta por todos os usuários. (Nenhum isolamento aqui.)
-
S oft State: Os valores armazenados no sistema podem mudar devido ao eventual modelo de consistência, conforme descrito na próxima bala.
-
E ventualmente consistente: Como os dados são adicionados ao sistema, o estado do sistema é gradualmente replicado em todos os nós. Por exemplo, no Hadoop, quando um arquivo é gravado no HDFS, as réplicas dos blocos de dados são criadas em diferentes nós de dados depois que os blocos de dados originais foram escritos. Durante o curto período antes dos blocos serem replicados, o estado do sistema de arquivos não é consistente.
O acrônimo BASE é um pouco projetado, já que a maioria das lojas de dados NoSQL não abandonam completamente todas as características ACID - não é realmente o conceito oposto polar que o nome implica, em outras palavras. Além disso, as características Soft State e eventualmente consistentes equivalem ao mesmo, mas o ponto é que, ao relaxar a consistência, o sistema pode escalar horizontalmente (muitos nós) e garantir a disponibilidade.
Nenhuma discussão do NoSQL seria completa sem mencionar o teorema CAP, que representa os três tipos de garantias que os arquitetos pretendem fornecer em seus sistemas:
-
Consistência: Similar ao C no ACID, todos os nós em o sistema teria a mesma visão dos dados a qualquer momento.
-
Disponibilidade: O sistema sempre responde aos pedidos.
-
Tolerância de partição: O sistema permanece on-line se ocorrerem problemas de rede entre nós do sistema.
O teorema CAP afirma que, em sistemas de rede distribuídos, os arquitetos precisam escolher duas dessas três garantias - você não pode prometer aos seus usuários os três. Isso deixa você com as três possibilidades mostradas:
-
Os sistemas que usam tecnologias relacionais tradicionais normalmente não são tolerantes a partições, para que possam garantir consistência e disponibilidade. Em suma, se uma parte desses sistemas tradicionais de tecnologias relacionais estiver desconectada, todo o sistema está offline.
-
Sistemas em que a tolerância e a disponibilidade da partição são de primordial importância não pode garantir consistência, pois as atualizações (o destruidor da consistência) podem ser feitas em ambos os lados da partição. As lojas de valor-chave Dynamo e CouchDB e a loja de colunas e família Cassandra são exemplos populares de sistemas de tolerância / disponibilidade (PA) de partição.
-
Sistemas em que a tolerância e a consistência da partição são de importância primordial não pode garantir disponibilidade porque os sistemas retornam erros até o estado particionado ser resolvido.
As lojas de dados baseadas em Hadoop são consideradas sistemas CP ( c onsistent e p tolerante a artigos). Com os dados armazenados de forma redundante em muitos nós escravos, podem ser toleradas parcelas para grandes porções (partições) de um cluster Hadoop. Hadoop é considerado consistente porque possui uma loja de metadados central (o NameNode) que mantém uma visão única e consistente dos dados armazenados no cluster.