Teorema do CAP, também chamado de Teorema de BREWER, afirma que é impossível que o armazenamento de dados distribuído forneça simultaneamente mais de duas das três garantias seguintes:
ü CONSISTÊNCIA: Cada leitura recebe a escrita mais recente ou um erro
ü DISPONIBILIDADE (AVAILABILITY) - Cada pedido recebe uma resposta (sem erro) - sem garantia de que contém a escrita mais recente
ü PARTIÇÃO - O sistema continua a funcionar apesar de um número arbitrário de mensagens serem descartadas (ou atrasadas) pela rede entre nós. A tolerância ao particionamento que garante sua escalabilidade.
Em outras palavras, o teor do CAP afirma que, na presença de uma partição da rede, é preciso escolher entre consistência e disponibilidade. A consistência conforme definida no teor de CAP é bastante diferente da consistência garantida em transações de bases de dados ACID.
O teorema CAP diz respeito a três propriedades:
Consistência (consistency): Cópias do mesmo dado devem ter o mesmo valor, respeitando a integridade do modelo.
Disponibilidade (availability): É a medida que se refere ao percentual de tempo em que o sistema fica disponível para receber e responder requisições. Um sistema que passa 99.9999...% do tempo “no ar” é um sistema com alta disponibilidade.
Tolerância a particionamento (partition tolerance): Em caso de falhas de rede que tornem o sistema distribuído segregado em subredes incomunicáveis entre si, o sistema deve permanecer no ar e disponível para receber e responder requisições.
O teorema afirma que não é possível garantir as três propriedades ao mesmo tempo. Em especial, os sistemas NoSQL costumam flexibilizar a consistência, fornecendo consistência eventual. Isso pode ser necessário para que o sistema tenha alta disponibilidade e consiga lidar com o volume e a velocidade dos dados.