Conceitos de bancos de Dados – O Teorema CAP

O Teorema CAP em Bancos de Dados

O Teorema CAP é um teorema criado pelo Dr. Eric Brewer, na ACM – Association for Computing Machinery (e por isso também chamado de Teorema de Brewer), e é empregado para descrever o comportamento de um sistema de bancos de dados distribuídos. Na prática, se refere ao comportamento de um sistema quando ocorre uma requisição de escrita de dados seguida de uma requisição de leitura (consulta).

De acordo com o teorema CAP, é possível criar um banco de dados distribuído que possua os comportamentos a seguir:

  • Consistente (Consistent) – As escritas são atômicas e todas as requisições de dados subsequentes obtém o novo valor. Assim, é garantido o retorno do dado mais atualizado armazenado, logo após ter sido escrito. Isso independe de qual nó seja consultado pelo cliente – o dado retornado para a aplicação será igual.
  • Disponíveis (Available) – O banco de dados sempre retornará um valor desde que ao menos um servidor esteja em execução – mesmo que seja um valor defasado. 
  • Tolerante a Partição (Partition Tolerant) – Ou ainda Tolerante a Falhas. O sistema ainda irá funcionar mesmo se a comunicação com o servidor for temporariamente perdida. Assim, se houver falha de comunicação com um nó da rede distribuída, os outros nós poderão responder às solicitações de consultas de dados dos clientes.

Porém, , de acordo com o teorema, um sistema distribuído de bancos de dados somente pode operar com dois desses comportamentos ao mesmo tempo, mas jamais com os três simultaneamente.

Teorema CAP em bancos de dados

Relação entre os elementos no Teorema CAP

Assim, é possível criar um banco de dados distribuído que seja consistente e tolerante a partições, ou disponível e tolerante a partições, ou ainda consistente e disponível (ou seja, não será um banco de dados distribuído). Mas não é possível criar um banco de dados distribuído que seja ao mesmo tempo consistente, disponível e tolerante a partições.

Consistência Eventual

Um conceito interessante derivado do teorema CAP é o da Consistência Eventual. Aqui, o sistema prioriza as escritas de dados (armazenamento), sendo o sincronismo entre os nós do servidor realizado em um momento posterior – o que causa um pequeno intervalo de tempo no qual o sistema como um todo é inconsistente. Para isso, são implementadas as propriedades Disponibilidade e Tolerância a Partição.

Exemplos de sistemas de bancos de dados que implementam a consistência eventual são o MongoDB, Cassandra e RavenDB (bancos NoSQL), entre outros. Em Bancos Relacionais, é muito comum implementar as propriedades Consistência e Disponibilidade. Como exemplos, citamos os SGBDRs Oracle Database, MySQL, PostgreSQL, SQL Server e outros.

Ao criar um banco de dados distribuído é importante ter em mente o teorema CAP. Você terá de decidir se o banco será consistente ou disponível, pois bancos de dados distribuídos são sempre tolerantes a partição.

Referências

Redmond, E.; Wilson J. R. Seven Databases in Seven Weeks – A Guide to Modern Databases and the NoSQL Movement. 1ª Ed. The Pragmatic Programmers, 2012 

 

Sobre Fábio dos Reis (1195 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

Escreva um comentário

Seu e-mail não será divulgado


*