Como as transações ACID e de banco de dados funcionam?


161

Qual é o relacionamento entre o ACID e a transação do banco de dados?

O ACID fornece transações no banco de dados ou é a mesma coisa?

Alguém poderia esclarecer este tópico.

Respostas:


320

ACID é um conjunto de propriedades que você gostaria de aplicar ao modificar um banco de dados.

  • Atomicidade
  • Consistência
  • Isolamento
  • Durabilidade

Uma transação é um conjunto de alterações relacionadas que são usadas para obter algumas das propriedades do ACID. Transações são ferramentas para obter as propriedades ACID.

Atomicidade significa que você pode garantir que todas as transações ocorram, ou nenhuma delas; você pode executar operações complexas como uma única unidade, tudo ou nada, e uma falha, falta de energia, erro ou qualquer outra coisa não permitirá que você esteja em um estado em que apenas algumas das mudanças relacionadas ocorreram.

Consistência significa que você garante que seus dados serão consistentes; nenhuma das restrições que você tem sobre dados relacionados será violada.

Isolamento significa que uma transação não pode ler dados de outra transação que ainda não foi concluída. Se duas transações estiverem sendo executadas simultaneamente, cada uma verá o mundo como se estivesse executando seqüencialmente e se uma precisar ler dados gravados por outra, terá que esperar até que a outra termine.

Durabilidade significa que, assim que uma transação é concluída, é garantido que todas as alterações foram registradas em uma mídia durável (como um disco rígido) e o fato de que a transação foi concluída também é gravada.

Portanto, as transações são um mecanismo para garantir essas propriedades; eles são uma maneira de agrupar ações relacionadas de modo que, como um todo, um grupo de operações possa ser atômico, produzir resultados consistentes, ser isolado de outras operações e ser gravado de forma durável.


6
Você diz "Consistência significa que você garante que seus dados serão consistentes; nenhuma das restrições que você possui sobre dados relacionados será violada". Se por restrições, você quer dizer aquelas definidas no banco de dados (por exemplo, restrições de verificação), o que o gerenciamento de transações tem a ver com impedir que elas sejam violadas? Eles não estão sempre em vigor? Parece-me que o C no ACID deve ter outro significado.
Marc Rochkind

20
@MarcRochkind Uma transação permite aplicar verificações de consistência, mesmo que operações individuais dentro da transação violem as restrições de consistência. Por exemplo, se você estiver atualizando um sistema de contabilidade de entrada dupla, talvez seja necessário debitar de várias contas e creditar em várias contas ao mesmo tempo. Sem transações, você verificaria as restrições após cada instrução e falharia porque as instruções individuais não preservam a consistência. Com as transações, embora as instruções individuais não preservem a consistência, a transação como um todo.
Brian Campbell

1
" e se um precisar ler dados gravados por outro, terá que esperar até que o outro termine " - isso não é inteiramente verdade. A primeira transação pode (e irá) ler esses dados e verá o estado como estava antes do início da segunda transação.
a_horse_with_no_name

1
@BrianCampbell 1) Consistência é "verificação de restrições", como UNIQUE, FOREIGN KEY e estado válido (de acordo com a lógica de negócios / requisito do aplicativo) no final da transação? 2) A atomicidade e / ou o isolamento por si só não garantem a consistência? Devemos mencionar a consistência explicitamente como uma propriedade necessária?
user104309

1
@a_horse_with_no_name você está falando sobre OCC (controle de concorrência otimista) v / s PCC (pessimista). Ambos podem ser implementados em um sistema de banco de dados compatível com ACID, depende se você deseja obter consistência ou alta disponibilidade.
Siddhartha

37

ACID são propriedades desejáveis ​​de qualquer mecanismo de processamento de transações.

Um DBMS é (se for bom) um tipo específico de mecanismo de processamento de transações que expõe, geralmente em uma extensão muito grande, mas não totalmente, essas propriedades.

Mas existem outros mecanismos que também podem expor essas propriedades. O tipo de software que costumava ser chamado de "monitores TP" é um exemplo disso (hoje em dia o equivalente na maior parte são servidores da Web).

Esses monitores TP podem acessar outros recursos além de um DBMS (por exemplo, uma impressora) e ainda garantir ACID para seus usuários. Como um exemplo do que o ACID pode significar quando uma impressora está envolvida em uma transação:

  • Atomicidade: um documento inteiro é impresso ou nada
  • Consistência: no final da transação, a alimentação do papel é posicionada no topo da página
  • Isolamento: dois documentos não são misturados durante a impressão
  • Durabilidade: a impressora pode garantir que não estava "imprimindo" com cartuchos vazios.

3
ótimos exemplos concisos de impressoras.
Lakesare

2
Bom exemplo. Eu não entendo a parte "Consistência". Na minha opinião, um exemplo melhor é "A impressora não aceita papéis maiores que 10 polegadas".
skeller88

EDIT - "papel com mais de 10 polegadas".
skeller88

1
Eu admito que é um pouco exagerado. Mas é difícil encontrar exemplos melhores, porque "consistência" é sobre dados e uma impressora não é exatamente um dispositivo de dados.
Erwin Smout

1
Bem, a impressora possui um recurso que impede que ela comece a imprimir se a contagem de páginas de um documento for maior que a contagem de folhas atualmente conhecida no suprimento de papel. Você vê que esse é o problema de muitas pessoas que comentam aqui. Você menciona "impressora" e eles vêem apenas o dispositivo de streaming serial idiota que possuem em sua mesa de trabalho, não o dispositivo profissional de alto nível que encheria toda a sala de estar (e que geralmente possui esse tipo de recurso que eu mencionei).
Erwin Smout

21

Modifiquei levemente o exemplo da impressora para torná-lo mais explicável

1 documento com 2 páginas de conteúdo foi enviado para a impressora

Transação - documento enviado para a impressora

  • atomicidade - a impressora imprime 2 páginas de um documento ou nenhuma
  • consistência - a impressora imprime meia página e a página fica presa. A impressora se reinicia e imprime 2 páginas com todo o conteúdo
  • isolamento - enquanto havia muitas impressões em andamento - a impressora imprime o conteúdo correto do documento
  • durabilidade - durante a impressão, houve um corte de energia - a impressora imprime novamente documentos sem erros

Espero que isso ajude alguém a entender o conceito de ÁCIDO


Não sei o que significa "enquanto houver muitas impressões em andamento" - são apenas "múltiplas" em vez de "muitas"?
22619 icc97

17

Qual é o relacionamento entre o ACID e a transação do banco de dados?

Em um banco de dados relacional, toda instrução SQL deve ser executada no escopo de uma transação.

Sem definir explicitamente os limites da transação, o banco de dados utilizará uma transação implícita que envolve todas as instruções individuais.

A transação implícita começa antes da execução da instrução e termina (confirmação ou reversão) após a execução da instrução. O modo de transação implícita é conhecido como confirmação automática.

Conforme explicado neste artigo , uma transação é uma coleção de operações de leitura / gravação com êxito apenas se todas as operações contidas tiverem êxito.

Atomicidade

Inerentemente, uma transação é caracterizada por quatro propriedades (comumente chamadas de ACID):

  • Atomicidade
  • Consistência
  • Isolamento
  • Durabilidade

O ACID fornece transações no banco de dados ou é a mesma coisa?

Para um sistema de banco de dados relacional, isso é verdade porque o Padrão SQL especifica que uma transação deve fornecer as garantias ACID:

Atomicidade

A atomicidade toma operações individuais e as transforma em uma unidade de trabalho tudo ou nada, sucedendo se e somente se todas as operações contidas tiverem êxito.

Uma transação pode encapsular uma alteração de estado (a menos que seja somente leitura). Uma transação deve sempre deixar o sistema em um estado consistente, não importa quantas transações simultâneas sejam intercaladas a qualquer momento.

Consistência

Consistência significa que as restrições são impostas para cada transação confirmada. Isso implica que todas as chaves, tipos de dados, verificações e acionadores são bem-sucedidas e nenhuma violação de restrição é acionada.

Isolamento

As transações requerem mecanismos de controle de simultaneidade e garantem a correção mesmo quando são intercaladas. O isolamento nos traz o benefício de ocultar mudanças de estado não confirmadas do mundo exterior, pois transações com falha nunca devem corromper o estado do sistema. O isolamento é alcançado através do controle de simultaneidade usando mecanismos de bloqueio pessimistas ou otimistas.

Durabilidade

Uma transação bem-sucedida deve alterar permanentemente o estado de um sistema e, antes de finalizá-lo, as alterações de estado são registradas em um log de transações persistente. Se o nosso sistema for afetado repentinamente por uma falha do sistema ou uma queda de energia, todas as transações confirmadas inacabadas poderão ser reproduzidas.

insira a descrição da imagem aqui

Para mais detalhes sobre Durabilidade e Redo Log, confira este artigo .


Para "consistência" - vejo "correção lógica específica da aplicação" como a explicação em muitos lugares. Suponha que, nesse caso, o banco de dados não conheça a lógica do aplicativo. Portanto, "consistência" não pode ser uma propriedade inerente de um banco de dados. Portanto, para o aplicativo implementar sua correção (ou "consistência"), Atomicity and Isolation não é suficiente?
user104309 16/02

1
Consistência no ACID significa restrições de integridade do banco de dados: restrições PK, FK, UNIQUE. O ACID é importante, mas seu aplicativo pode precisar de mais do que isso, como evitar atualizações perdidas em longas conversas, o que exige um bloqueio otimista no nível do aplicativo.
Vlad Mihalcea

Deixe-me ver. Mas antes disso eu preciso de um esclarecimento básico. O comentário de Brain Campbell na resposta aceita "Com transações, embora as declarações individuais não preservem a consistência, a transação como um todo". Como isso é possível ? E como vários débitos e créditos estão relacionados à consistência?
user104309 16/02

Confira o capítulo Transações no meu livro Java Persistence de alto desempenho para obter uma resposta detalhada para todas essas perguntas.
Vlad Mihalcea

12

As propriedades ACID são um conceito muito antigo e importante da teoria do banco de dados. Eu sei que você pode encontrar muitas postagens sobre este tópico, mas ainda gostaria de começar a compartilhar respostas sobre isso, porque este é um tópico muito importante do RDBMS.

O Sistema de banco de dados brinca com vários tipos diferentes de transações, nas quais todas as transações têm certas características. Essa característica é conhecida como Propriedades ACID. As propriedades ACID recebem donatário de todas as transações do banco de dados para realizar todas as tarefas.

Atomicidade: comprometa tudo ou nada.

Consistência: faça um registro consistente em termos de validar todas as regras e restrições da transação.

Isolamento: verifique se duas transações desconhecem uma à outra.

Durabilidade: dados comprometidos armazenados para sempre. Referência retirada deste artigo:


5

Para citar a Wikipedia :

ACID (atomicidade, consistência, isolamento, durabilidade) é um conjunto de propriedades que garantem que as transações do banco de dados sejam processadas de maneira confiável.

Um DBMS que suporta transações se esforçará para oferecer suporte a todas essas propriedades - qualquer DBMS comercial (assim como vários DBMSs de código aberto) fornece 'suporte' ACID completo - embora muitas vezes seja possível (por exemplo, com níveis de isolamento variados no MSSQL) diminuir o ACIDness - perdendo assim a garantia de um comportamento totalmente transacional.


3

[Gray] introduziu as propriedades ACD para uma transação em 1981. Em 1983 [Haerder] adicionou a propriedade Isolation. Na minha opinião, as propriedades da ACD teriam um conjunto de propriedades mais útil para discutir. Uma interpretação de Atomicity (de que a transação deve ser atômica como vista de qualquer cliente a qualquer momento) implicaria realmente a propriedade de isolamento. A propriedade "isolamento" é útil quando a transação não é isolada; quando a propriedade de isolamento estiver relaxada. No ANSI SQL, fale: se o nível de isolamento for mais fraco, SERIALIZABLE. Mas quando o nível de isolamento é SERIALIZABLE, a propriedade de isolamento não é realmente interessante.

Eu escrevi mais sobre isso em uma postagem no blog: "O ACID não faz sentido".

http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html

[Gray] O conceito de transação, Jim Gray, 1981. http://research.microsoft.com/en-us/um/people/gray/papers/theTransactionConcept.pdf

[Haerder] Princípios de recuperação de banco de dados orientada a transações, Haerder e Reuter, 1983. http://www.stanford.edu/class/cs340v/papers/recovery.pdf


1

A transação pode ser definida como uma coleção de tarefas consideradas como unidade mínima de processamento. Cada unidade mínima de processamento não pode ser dividida mais.

Toda transação deve conter quatro propriedades conhecidas como propriedades ACID. ou seja, ACID são o grupo de propriedades de qualquer transação.

  • Atomicidade:
  • Consistência
  • Isolamento
  • Durabilidade
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.