O conceito ACID

Breno Peretta
4 min readMay 5, 2019

--

Neste artigo eu decidi ir pra um caminho diferente, vamos falar aqui sobre um conceito de banco de dados chamado ACID e ver alguns exemplos de aplicabilidade deste conceito.

Bom, ACID, significa (Atomicity, Consistency, Isolation, Durability) que é Atomicidade, Consistência, Isolamento e Durabilidade. Vamos ver agora cada um desses itens separadamente para entendermos melhor.

Antes de continuar aqui temos que ressaltar que eu usarei o termo “transações”, e o que são transações quando se trata de banco de dados? Quando temos um banco de dados, nós realizamos operações nele, e essas operações são realizadas em blocos que dependem uns dos outros, esses blocos são chamados de transações. Mas para não dificultar muito pense em transações como operações de banco de dados (como inserir algo na tabela, atualizar etc).

Atomicidade

A atomicidade trás um conceito muito interessante, o conceito de “tudo ou nada”, que é basicamente, ou todas operações referentes a um assunto funcionam, ou aquele assunto inteiro falha. Para entendermos melhor, vamos ver um exemplo aqui:

Vamos pensar numa transação bancária, para realizar a transação, é necessário sair o dinheiro da conta A e chegar este dinheiro na conta B, como mostra a figura

E NÃO É VIÁVEL que ocorra qualquer tipo de falha, se algum desses 3 caminhos falhar, a operação não pode continuar, ou seja, ou todas as partes da transação funcionam, ou a transação inteira não funciona, por isso o “tudo ou nada”.

Consistência

A consistência é assegurar que o banco de dados estará em um estado válido, então ao se realizar uma transação, o banco irá de um estado válido para outro também válido, e em caso de falha na operação, será possível retornar ao estado anterior a operação. Vale ressaltar que esta validação deve ser feita com regras definidas, como por exemplo regras de chave estrangeira.

Com isso nós evitamos que os dados sejam corrompidos por conta de alguma falha na operação, ou melhor dizendo, nós evitamos inconsistências.

Vamos pensar em duas tabelas se relacionando, e ao tentar inserir um dado de uma tabela em outra (sem que este registro exista na outra tabela), a operação irá falhar, então, é preciso retornar até o estado em que a operação não esteja com falha, e assim o banco se mantém consistente.

Isolamento

A propriedade do isolamento garante que as transações possam ser feitas de forma simultânea e independente. Então, uma transação que está em andamento e ainda não foi finalizada estará isolada das demais transações, assim garantimos que possa ser feito múltiplas transações ao mesmo tempo e se uma delas falhar, não irá alterar alguma outra transação concorrente.

Como exemplo vamos pensar que dois usuários estão tentando comprar a mesma cadeira de um cinema, ao mesmo tempo. Ambos estão colocando os dados da compra, porém a compra só pode ser realizado pelo que finalizar a compra primeiro.

Com o isolamento os usuários irão passar por todo processo de compra porém ao ser finalizada a compra de um usuário, a outra compra será interrompida sofrendo um processo chamado “rollback”.

Durabilidade

A durabilidade irá garantir que após as transações serem efetivadas (o termo disso é “commit”), em caso de falha ou reiniciamento do sistema os dados não deixarão de existir. Para isso as transações já finalizadas serão gravadas em dispositivos de memória não voláteis, como HD’s, para que estejam sempre disponíveis para consultas ou uso dos dados.

Então vamos pensar no exemplo anterior, pense que após um usuário finalizar uma compra de uma cadeira para o cinema, o sistema seja reiniciado por falta de energia, os dados do usuário ainda devem estar certos, a data da compra, valor, cadeira etc.

É valido lembrar aqui que estes conceitos são para banco de dados relacionais, então não é qualquer tipo de banco que pode usar estes conceitos.

GitHub: https://github.com/BrenoP

Obrigado por ler até aqui, se você gostou do post e tem alguma dúvida ou alguma crítica, me contate:

LinkedIn: https://www.linkedin.com/in/brenoperetta

E-mail: peretta.breno@gmail.com

--

--