Quanto de marketing há no ACID?

Olá a todos. Em contato com Vladislav Rodin. Atualmente, sou o chefe do curso de arquiteto de carga alta da OTUS e também ensino cursos de arquitetura de software.

Além de ensinar, como você pode ver, eu escrevi para o blog OTUS Habré, material com direitos autorais do blog, e o artigo de hoje quero coincidir com o início do curso "Banco de Dados" , que agora está aberto ao público.




Prefácio


As transações surgiram nos anos 70 e foram apresentadas como uma ferramenta de banco de dados para resolver os problemas de tolerância a falhas e acesso a dados em um ambiente competitivo. Em seguida, foram formuladas várias propriedades que uma transação deve possuir para cumprir as tarefas atribuídas a ela, e as letras maiúsculas dessas propriedades, definidas na ordem correta, compunham a bela sigla ACID.

O período durante o qual esses eventos ocorreram foi caracterizado pela ausência de altas cargas, pela Internet e por problemas de desempenho, que poderiam ser resolvidos apenas por métodos de escala vertical. Posteriormente, no início dos anos 2000, apareceu uma tendência nos bancos de dados NoSQL, apareceu a abreviatura BASE, que na verdade era contrária ao ACID clássico (ACID - ácido, BASE - alcalino). Agora, há uma tendência inversa para o ACID. Até o MongoDB do NoSQL agora suporta o ACID.

Vejamos o significado dessa abreviação e quanto de marketing ela possui.

ACID representa 4 propriedades:

A = atomicidade
C = consistência
I = isolamento
D = durabilidade

Agora, vamos falar sobre cada propriedade separadamente.

A = atomicidade


Atomicidade é um termo sobrecarregado e, no contexto de transações em um banco de dados, pode ser formulado como o princípio de "tudo ou nada". Se sua transação contiver 10 operações de inserção, todas as 10 serão executadas (transações de confirmação serão realizadas) ou nenhuma delas (transações de reversão serão realizadas).

Como esta propriedade é fornecida? O fato é que, quando uma transação contendo as mesmas 10 inserções chega ao banco de dados, os dados não começam a mudar. Antes de uma transação, a transação é gravada diretamente nos dados em um log, no qual as alterações feitas por ela são registradas. Esse diário também pode ser usado para replicar dados ou pode não ter relação com ele, como descrevi, por exemplo, aqui. Graças a este diário, as transações podem ser confirmadas diretamente nos dados ou, nesse caso, revertê-los. A regra de que uma transação deve ser fechada o mais rápido possível segue diretamente do entendimento dos princípios para implementar essa propriedade: os bancos de dados são proibidos de limpar esse log enquanto a transação está aberta, para que possa ficar entupido, o que, por sua vez, leva a consequências muito desagradáveis.

C = consistência (consistência ou integridade)


Em termos de ACID, consistência não significa o mesmo que em termos do teorema da PAC (na teoria de sistemas distribuídos, existem muitos graus dessa consistência). Por consistência, queremos dizer o seguinte: alguns invariantes predefinidos do sistema devem ser executados antes e depois da transação de confirmação. Exemplos de invariantes do sistema podem ser representados: o débito converge com o empréstimo, o salário total de funcionários não excede o orçamento, o número de funcionários da empresa é igual ao número de vagas abertas anteriormente, etc. No idioma do banco de dados, isso significa apenas o cumprimento de todas as restrições.

A questão sobre a necessidade de consistência no nível do banco de dados é bastante controversa, porque a presença de restrições pode indicar que parte da lógica de negócios mudou do aplicativo para o nível do banco de dados, o que não é universalmente reconhecido como uma boa prática. No final, o próprio aplicativo pode decidir não confirmar dados inválidos. Há uma opinião de que a consistência foi adicionada apenas para tornar a abreviação bonita (marketing).

I = isolamento


O isolamento é uma propriedade do banco de dados que permite que transações paralelas sejam executadas como seqüenciais. Afinal, ninguém proíbe o banco de dados de executar várias transações ao mesmo tempo, é necessário garantir que elas não se afetem, para que não ocorram anomalias do tipo de condição de corrida. De fato, é o isolamento que resolve o problema do acesso a dados em um ambiente competitivo.

A divulgação do conceito de isolamento devido ao seu volume merece um artigo separado., porque é precisamente o isolamento que pode ser chamado de coração do ACID. O preço da transacionalidade geralmente se resume ao preço de garantir o isolamento, e é por isso que o isolamento tem níveis diferentes, cada um dos quais fornece seu próprio nível de proteção contra as condições da corrida e carrega uma ou outra sobrecarga. O isolamento é totalmente garantido apenas no nível serializável, que é muito difícil de implementar e raramente é necessário.

D = durabilidade


A durabilidade nos diz que, se uma transação foi aplicada, ela nunca deve desaparecer. De fato, isso significa o seguinte: se o banco de dados respondeu que uma transação foi confirmada, a transação foi confirmada na memória não volátil. Isso significa que ocorreu a chamada do sistema fsync, ou seja, os buffers foram liberados para o disco rígido e ela respondeu ok.

Durabilidade também é um termo de marketing, porque não pode ser totalmente fornecido. Mesmo que descartemos os cenários artificiais de “queimar a Terra por alienígenas”, após os quais não haverá bancos de dados ou transações, cenários mais prováveis, mas extremos, de destruição física de um disco rígido específico no qual a transação foi gravada, podemos lembrar que a chamada do sistema fsync garante bater em um disco rígido no controlador, que, por sua vez, ainda contém um buffer volátil. O tempo gasto é curto, mas não é igual a 0. Como resultado, se você desligar a eletricidade exatamente no momento “certo”, a transação ainda poderá ser perdida!

Embora o problema com o fsync tenha sido resolvido em um banco de dados Oracle caro, nada pode nos proteger dos problemas associados à destruição física da máquina. Só podemos aumentar as garantias usando backups e replicação .

achados


Apesar do ACID fornecer propriedades bastante interessantes, como atomicidade e isolamento, algumas dessas propriedades são apenas de marketing, e mesmo conhecidas por seu rigor em comparação com o BASE, o ACID não garante totalmente a ausência de oportunidades de perda de transações, bem como o impacto dos resultados. executando transações simultâneas entre si (o isolamento ainda deve estar configurado!).


Convidamos todos a uma aula gratuita sobre o tópico: "Um modelo para trabalhar com dados no PostgreSQL . "



All Articles