ACID, BASE e o Teorema CAP
Description
ACID ou BASE, qual escolher? Conhece o teorema CAP? Neste episódio falamos sobre as propriedades destes dois modelos transacionais.
Marcio
https://twitter.com/marciofrayze
Julianno
https://twitter.com/juliannoms
Links:
Artigo "ACID vs. BASE: What are the differences?"
https://phoenixnap.com/kb/acid-vs-base
Teorema CAP:
https://en.wikipedia.org/wiki/CAP_theorem
https://dzone.com/articles/understanding-the-cap-theorem
https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html
https://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed/
Modelo ACID
Atômico – Cada transação é devidamente realizada ou o processo para e o banco de dados volta para o estado antes do início da transação (rollback), garantindo que todos os dados no banco de dados sejam válidos.
Consistente – Uma transação processada nunca colocará em risco a integridade estrutural do banco de dados. A transação cria um novo estado válido tanto para a estrutura como para os dados ou reverte para o estado anterior.
Isolado – As transações não podem comprometer a integridade de outras transações interagindo com elas enquanto ainda estão em andamento.
Durável – Os dados relacionados à transação concluída persistirão mesmo nos casos de quedas de rede ou energia. Se uma transação falhar, ela não afetará os dados manipulados.
Modelo BASE
Basically Available – Em vez de impor consistência imediata, os bancos de dados BASE garantirão a disponibilidade de dados espalhando-os e replicando-os nos nós do cluster de banco de dados.
Soft State – Devido à falta de consistência imediata, os valores dos dados podem ser diferentes dependendo do nó que atender a requisição.
Eventually Consistent – O fato de não impor consistência imediata não significa que ela nunca a alcance. No entanto, até que isso ocorra, as leituras de dados ainda são possíveis (mesmo que não reflitam a realidade mais atual).
Teorema CAP
Eric Brewer provou que em um modelo distribuído de armazenamento você só consegue atender simultaneamente duas de três opções:
Consistência (C): Cada leitura recebe a gravação mais recente ou um erro.
Disponibilidade (A): Cada solicitação recebe uma resposta de sucesso, sem a garantia de que contém a gravação mais recente.
Tolerância à partição (P): O sistema continua a operar apesar de um número arbitrário de mensagens sendo retiradas (ou atrasadas) pela rede entre nós.
Na prática você precisará ter suporte a tolerância a partição, então a escolha se resume a: quando ocorre um particionamento na rede, o que você quer priorizar: consistência ou disponibilidade?