Bancos de Dados: Relacionais vs. NoSQL, Escalabilidade e Conceitos Essenciais
Classificado em Computação
Escrito em em português com um tamanho de 4,91 KB
Características dos Bancos de Dados Relacionais
Sucessor do modelo hierárquico, os bancos de dados relacionais armazenam informações em Tabelas (Relações), contendo linhas e colunas. Cada tupla representa uma entidade do mundo real, e cada coluna define uma propriedade do dado. As tabelas estabelecem relacionamentos entre si através de Chave Primária (CP) e Chave Estrangeira (CE), garantindo que informações referenciem dados já cadastrados e povoados em outras tabelas.
Esses sistemas oferecem validação, recuperação de falhas, segurança, otimização de consultas e garantia de integridade de dados, entre outras funcionalidades. Permitem que múltiplos usuários acessem o banco de dados simultaneamente.
Propriedades ACID em Bancos de Dados
As propriedades ACID são fundamentais para garantir a confiabilidade das transações em bancos de dados:
- Atomicidade: Uma transação é completada com perfeição ou é desfeita, retornando ao estado inicial.
- Consistência: As regras e integridades do banco de dados devem ser obedecidas para evitar inconsistências.
- Isolamento: Uma transação não é interferida por nenhuma outra transação concorrente, operando como se estivesse sozinha.
- Durabilidade: Os resultados de uma transação bem-sucedida são permanentes e não serão perdidos.
Escalabilidade e Desafios em BDs Relacionais
Quando o volume de uma base de dados cresce excessivamente, os bancos de dados relacionais podem tornar-se problemáticos e menos eficientes. Os principais desafios residem em conciliar o modelo relacional com a crescente demanda por escalabilidade.
Escalabilidade: Refere-se à capacidade de um sistema de melhorar seu desempenho para atender a uma demanda crescente.
- Escalabilidade Vertical: Consiste em aprimorar os recursos de um único servidor, como aumentar a capacidade de memória, melhorar a qualidade do hardware, o link de internet, o cabeamento, etc.
- Escalabilidade Horizontal: Envolve a adição de mais máquinas servidoras ao banco de dados para distribuir a carga.
Entendendo o Teorema CAP
O Teorema CAP descreve três propriedades desejáveis em sistemas distribuídos: Consistência, Disponibilidade e Tolerância à Partição. Ele afirma que, em um banco de dados distribuído, é possível garantir no máximo duas dessas três propriedades simultaneamente em um dado instante.
Os bancos de dados relacionais tradicionalmente priorizam a Consistência. Devido às propriedades ACID, a Tolerância à Partição e a Disponibilidade tornam-se desafios significativos para sua implementação em larga escala.
A Origem dos Bancos de Dados NoSQL
Buscando resolver problemas de escalabilidade, performance e disponibilidade, projetistas começaram a flexibilizar as regras que norteiam o Modelo Relacional. O termo "NoSQL" foi usado pela primeira vez em 1998 para uma solução que não oferecia interface SQL, mas ainda era baseada no Modelo Relacional.
Tempos depois, o termo passou a representar diversas soluções que demonstravam resultados melhores do que a utilização exclusiva do Modelo Relacional para certos tipos de problemas.
Principais Características dos BDs NoSQL
Os bancos de dados NoSQL apresentam características distintas:
- Não são relacionais: Embora possam realizar relacionamentos entre informações, esses bancos priorizam a independência de esquemas rígidos, evitando a dependência de relacionamentos complexos.
- Escalabilidade Horizontal: Projetados para lidar com grandes volumes de dados, permitem a adição de mais máquinas para aumentar a capacidade de forma distribuída.
- Open Source: Muitos BDs NoSQL são de código aberto, o que fomenta a colaboração da comunidade e a inovação contínua.
Conceitos Avançados: Map/Reduce, MVCC e Vector Clocks
- Map/Reduce: Um modelo de programação que permite a manipulação e processamento de enormes volumes de dados distribuídos ao longo de uma rede de nós.
- MVCC (Multi-Version Concurrency Control): Oferece suporte a transações paralelas em bancos de dados. Ao não utilizar locks para controle de concorrência, permite que transações de escrita e leitura ocorram simultaneamente, melhorando o desempenho.
- Vector Clocks: Utilizados para ordenar eventos que ocorreram em um sistema distribuído. Dada a possibilidade de várias operações acontecerem simultaneamente, o uso de um log de operações informando suas datas é crucial para determinar qual versão de um dado é a mais recente.