© 13_Phunkod/Shutterstock.com

Ao usar sistemas de gerenciamento de banco de dados (DBMS), as transações são realizadas regularmente. Geralmente, são executados como transações ACID, que trazem muitos benefícios para manter um banco de dados íntegro e funcionando adequadamente. Se você está tentando se familiarizar com as propriedades ACID no DBMS, cobrimos tudo o que você precisa saber.

O que é uma transação ACID?

Com relação a bancos de dados, uma transação é uma operação que realiza uma única tarefa, podendo alterar o conteúdo do banco de dados. As transações usam operações de leitura e gravação para trabalhar com dados. Ou seja, eles leem os dados existentes e inserem, ou “escrevem”, novos valores de dados. Um exemplo clássico disso é quando o dinheiro é transferido de sua conta bancária. Dessa forma, as transações ACID estão em um estado concluído ou incompleto. Neste exemplo, o dinheiro não pode ser sacado simultaneamente de sua conta e não sacado-ocorreu ou não.

O objetivo de uma transação ACID é manter a consistência e a correção do banco de dados após a execução das transações. As propriedades ACID no DBMS permitem que os desenvolvedores executem operações elaboradas, garantindo que seus dados estejam seguros e corretos. A maneira como isso é feito é por meio das propriedades ditadas da transação, conhecidas como propriedades ACID. ACID significa Atomicidade, Consistência, Isolamento e Durabilidade. Em seguida, vamos nos aprofundar no significado desses termos.

As transações ACID garantem a precisão e a consistência do banco de dados após a execução das transações.

©dizain/Shutterstock.com

Atomicidade

Refere-se à forma como os extratos dentro de uma transação são tratados. Uma instrução é uma tarefa única, como ler, escrever, atualizar ou excluir dados. Atomicidade significa que cada instrução é tratada como uma única unidade e que a tarefa inteira é executada ou nenhuma delas é. Isso também impede que transações parciais ocorram.

Em outras palavras, a atomicidade ajuda a evitar corrupção e perda de dados se suas operações falharem no meio do caminho. O banco de dados mantém um registro de todas as alterações feitas e, se a conexão for interrompida, essas alterações serão desfeitas. Isso depende de duas operações conhecidas como “Abort” e “Commit”. O primeiro desfaz as alterações se a transação for interrompida e o último torna as alterações visíveis se a transação for concluída.

Consistência 

Consistência significa algo semelhante ao que ocorre na maioria das situações práticas. Com relação aos bancos de dados, isso significa que as transações apenas alteram os dados de maneiras previsíveis e predefinidas, e os valores dos dados são preservados. Se a transação violar as regras do banco de dados, ela será abandonada. Isso também evita corrupção de dados ou erros como a atomicidade e preserva a integridade do banco de dados evitando consequências não intencionais.

Isolamento

É importante ao trabalhar com bancos de dados que as transações dos usuários não interferem entre si. Para conseguir isso, o isolamento é usado como uma propriedade. Isso significa que, quando os usuários estão operando no mesmo banco de dados simultaneamente, cada solicitação de transação é realizada como se fossem solicitações individuais. Essas transações não afetam umas às outras e são tratadas como se fossem serializadas, mesmo que ocorram simultaneamente. Por serem sequenciais, eles são impedidos de afetar uns aos outros e danificar a integridade dos dados.

Durabilidade

A última propriedade do ACID é a durabilidade. Isso ajuda a preservar os dados em caso de falha do sistema, salvando as alterações incrementais feitas ao longo do caminho. Se a transação for bem-sucedida, as alterações não serão desfeitas. A durabilidade também permite que o banco de dados reverta suas alterações no caso de uma transação interrompida.

Propriedades ACID em DBMS: Transações de exemplo

Agora abordamos os fundamentos do que o ACID propriedades são, é hora de ilustrar essas propriedades com um exemplo simples de transação.

Atomicidade

A maneira mais fácil de explicar a atomicidade é considerar a situação em que você deseja transferir dinheiro de uma conta bancária para outra.

As transações devem ser atômicas porque você não deseja se deparar com uma situação em que uma operação incompleta ocorra. Nesse caso, pode ser dinheiro sendo retirado, mas não depositado, ou a segunda conta sendo creditada sem que o dinheiro seja retirado da conta de origem. Como tal, essas transações precisam ser desfeitas se não forem concluídas com sucesso, portanto, a atomicidade é fundamental. Os dados e transações para este exemplo são mostrados abaixo.

X: 500Y: 200T1T2Read(X)
X:=X – 50
Write(X)Read(Y)
Y: Y + 50
Write(Y)X: 450Y: 250

Se quisermos transferir $ 50 da conta X para a conta Y, precisamos usar uma transação T com duas etapas-T1 e T2. Ou seja, retirar o dinheiro da conta X e depositar o dinheiro na conta Y. Se a transação for interrompida após a execução de write(X), mas antes de write(Y), a operação será inconsistente e o banco de dados será comprometido. Portanto, a transação deve ser realizada em sua totalidade. Caso contrário, a transação falha e as operações são desfeitas.

Consistência

Usando o mesmo exemplo, a consistência garante que o valor da quantia de fundos em qualquer conta seja consistente. Ou seja, o valor é o mesmo no início e no final de cada transação. Isso mantém a integridade do banco de dados e também a natureza previsível dos valores dentro dele. Nessa situação, é importante que a restrição de que o saldo bancário seja um número inteiro positivo seja respeitada. Caso contrário, a transação falhará.

Para ilustrar, se o total de fundos na conta X for de US$ 500 e quisermos transferir US$ 50 para a conta Y, o total de fundos em ambas as contas deve ser sempre igual a US$ 500, supondo que não haja fundos iniciais na conta Y. A consistência pode parecer uma das propriedades ACID mais simples no DBMS, mas é muito crucial.

Isolamento

Para mostrar um exemplo em que o isolamento é’t usado corretamente, considere duas transações, T e T”. Enquanto T está recuperando dados e atualizando de uma linha, T” está computando esses dados. Se T” recuperar dados antes de T terminar de atualizar, a transação concluída mostrará dados incorretos. Os dados e as transações para este exemplo são mostrados abaixo, onde “Weight”=X e “Height”=Y.

NameWeight/lbHeight/inStephen17972Denise14658
TT”Read(Weight)
X:=X/2.2
Gravar(X)
Ler(Y)
Y:=Y*0.0254
Gravar(Y)Ler(X)
Ler(Y)
Z:=X/Y2
Write(Z)

Neste caso, T está convertendo os valores de peso e altura em quilogramas e metros, respectivamente, e T” está tentando calcular o IMC da pessoa de acordo com a equação IMC=kg/m2. Para ilustrar, vamos considerar o cenário onde T é executado até a etapa Read(Y), e T” começa. O valor correto para X é recuperado por T” já que X já foi calculado, mas o valor incorreto para Y é recuperado porque o valor atualizado ainda não foi escrito por T. Isso pode ser ilustrado como:

T”: (X/Y2=81,36/722=0,016)

Na realidade, o cálculo deve ser:

(X/Y2=81,36/1,832=24,3)

Como T”assumiu o valor inicial para Y, o banco de dados agora é inconsistente e o valor de saída é impreciso e essencialmente sem sentido. Essa situação, em que dados incorretos são recuperados, é conhecida como”leitura suja”. A discrepância em um caso de transferência de dinheiro pode ser mais insidiosa e mais difícil de detectar, pois seria uma diferença relativamente pequena nos fundos calculados e esperados. De qualquer forma, as transações devem ser isoladas, com alterações incrementais invisíveis para qualquer transação até que tenham foram armazenados na memória.

Durabilidade

Como a durabilidade gira em torno da preservação de dados, isso pode ser considerado no contexto de uma queda de energia. Se houver uma falha inesperada como esta após o dinheiro foi transferido, essa alteração nas informações deve ser preservada pelo banco de dados em non-vola memória do azulejo. No entanto, se a interrupção ocorrer durante a transação, as alterações serão revertidas e desfeitas de acordo com a atomicidade.

A durabilidade se concentra na preservação de dados em caso de falhas inesperadas.

©thinkhubstudio/Shutterstock.com

Concluindo

Em conclusão, podemos ver a importância de todas as quatro propriedades ACID no DBMS. Juntos, eles garantem que apenas as transações corretas sejam concluídas e as informações atualizadas sejam armazenadas na memória não volátil para proteção contra falhas inesperadas. Eles também mantêm a natureza previsível das alterações de dados e garantem que as transações não interfiram umas nas outras.

A seguir…

Propriedades ACID em DBMS explicadas, com exemplos Perguntas frequentes (perguntas frequentes) Perguntas) 

O que é uma transação no DBMS?

Uma transação refere-se a um conjunto de operações que executam um único conjunto de trabalho lógico. Nesse sentido, trabalho lógico significa uma mudança significativa nos dados, como transferir dinheiro de uma conta para outra. As transações podem estar em processo de execução, não serem concluídas ou serem interrompidas por vários motivos.

O que são propriedades ACID no DBMS?

Propriedades ACID referem-se a como os bancos de dados governam as transações executadas com seus dados. ACID significa Atomicidade, Consistência, Isolamento e Durabilidade.

Por que as propriedades ACID são importantes?

As propriedades ACID ajudam a manter os dados nos bancos de dados corretos e consistentes e a preservá-los em caso de eventos inesperados, como energia falhas. Além disso, as propriedades garantem que as transações não interfiram umas nas outras.

Quando devo usar uma transação ACID multidocumento?

Às vezes, os dados relacionados são divididos entre vários registros, portanto, a manipulação de dados deve ser capaz de trabalhar com isso para o sucesso da transação. A maioria dos aplicativos não exige transações com vários documentos, mas, para alguns, elas são cruciais. Muitos modelos de dados são flexíveis, o que significa que eles permitem que dados relacionados sejam armazenados em um único documento, mas também são capazes de trabalhar com dados de vários documentos. Um exemplo é o MongoDB.

Quais são as desvantagens de usar transações ACID?

A desvantagem de usar transações ACID é que o banco de dados impede operações simultâneas, como como dados de escrita, de interferir. Embora isso seja em grande parte um benefício, ele impede que usuários ou clientes executem transações se estiverem esperando que outra seja concluída. Isso pode afetar negativamente a experiência do usuário e levar a uma maior latência do aplicativo.

Como o modelo ACID se compara ao modelo BASE?

O modelo ACID visa entregar consistência, enquanto o modelo BASE visa entregar alta disponibilidade. O BASE faz isso espalhando e replicando dados entre os nós do banco de dados, permitindo que os dados mudem ao longo do tempo e que as leituras de dados sejam realizadas conforme necessário. A consistência pode eventualmente ser alcançada através do modelo BASE, mas não é um requisito imediato.

O que é um banco de dados relacional?

Um banco de dados relacional é aquele em que os dados são armazenados em uma ou mais tabelas e se relacionam entre si por meio de uma chave comum. Assim, os tipos de dados podem estar relacionados entre si por meio de relacionamentos um-para-um, um-para-muitos ou muitos-para-muitos.

Quais bancos de dados suportam propriedades ACID?

DBMS compatíveis com ACID incluem MySQL,  PostgreSQL,  SQLite, Oracle e Microsoft SQL Server.

Qual ​​setor usa predominantemente propriedades ACID?

O setor financeiro usa quase completamente o DBMS compatível com ACID.

Quais bancos de dados não suportam propriedades ACID?

NoSQL, ou “non-Bancos de dados SQL” não suportam totalmente as propriedades ACID, porque não possuem uma estrutura de tabela fixa. Eles fornecem consistência eventual, de acordo com o modelo BASE.

By Maxwell Gaven

Trabalho com TI há 7 anos. É divertido observar a constante mudança no setor de TI. TI é meu trabalho, hobby e vida.