Tratamento de Concorrência de Dados no DB
Data de elaboração | 16/09/2021 |
---|---|
Responsável pelo estudo |
|
Equipe do estudo | Tambaqui |
Alvo | Bancos de dados |
Origem |
|
Objetivo | O Objetivo do estudo apresentado, é levantar causas e possíveis soluções para a concorrência de dados em um determinado banco de dados, utilizando algumas técnicas criadas para melhorar e corrigir esse problema. |
Observações |
Glossário
lock - Se refere a ação de bloquear itens de dados no banco
unlock - Se refere a ação de desbloquear itens de dados no banco
Timestamp - É uma marca de tempo em um item de dados do banco
1. Introdução
A concorrência de dados, é um problema comum e bem conhecido entre os gestores de bancos de dados e também, pelos desenvolvedores, um problema que acaba se agravando quando se têm muitos usuários acessando um mesmo banco. Ela ocorre quando, em um banco de dados, usuários distintos tentam acessar a mesma informação e então para corrigir o problema, é feito um controle entre essas transações.
Figura 1: exemplificando a concorrência em uma tabela.
Podemos ver na figura 1, que existem 3 usuários tentando acessar a mesma tabela, e que se não houvesse um controle, os dados ali poderiam ficar com a integridade comprometida.
2. Desenvolvimento
2.1 Controle de concorrência
Controle de concorrência é quando, em um banco de dados, usuários distintos tentam acessar a mesma informação e então é feito um controle entre essas transações. E para a solução deste problema existem diversas técnicas de controle de concorrência que são utilizadas como forma de assegurar a propriedade de não interferência entre uma operação e outra, ou o isolamento das transações executadas ao mesmo tempo, grande parte dessas técnicas garante a serialização, que é a execução das transações de forma serial. Para isso, é necessário saber que transações são todas as operações executadas entre o início e o fim da transação
2.2 Técnica de bloqueio
A técnica de bloqueio em duas fases para controle de concorrência é baseado no bloqueio de itens de dados, sendo que, chamamos de bloqueio uma variável que fica atrelada ao item de dados. Este bloqueio pode ser binário (possui dois valores: 1 e 0), logo, o item de dados está bloqueado ou não está bloqueado. Permitindo que o item de dado só esteja acessível para uma transação apenas se a variável não estiver bloqueada (ou estiver com valor 0). São usadas duas operações para o bloqueio binário, são elas: lock(1) e unlock(0), quando o item de dados está sendo usado, o estado da variável é lock(1), assim que a transação encerra a utilização do item é emitida a operação unlock(0), então, o item já está disponível para outra transação.
2.3 Técnica baseada em Timestamp
Para cada transação iniciada, é associado um timestamp fixo exclusivo, ou seja, antes que uma transação tenha início, o sistema de banco de dados fornecerá um rótulo de tempo (lembrando que este é um identificador exclusivo criado pelo SGBD para identificar uma transação). Supondo que temos duas transações A e B, a transação A se iniciou no tempo 1 e a transação B teve início no tempo 2, logo, a transação A será executada primeiro que a transação B, pois seu tempo de início é mais antigo.
Nesta técnica existe a possibilidade de paralisação de transações longas, caso uma série repetitiva de transações curtas causar o reinício da transação longa. Caso isso ocorra, é necessário que as transações que estão em conflito sejam suspensas temporariamente para permitir que a transação seja concluída.
3. Conclusão
Após analisar as técnicas de gerenciamento de concorrência descritas acima, é possível que possam ser adaptadas e implementadas de alguma uma forma em código, e também, é possível que surjam ideias e novas técnicas para que o problema possa ser resolvido, esse estudo teve o propósito de levantar possíveis soluções para que possam ser implementadas em algum momento ao longo do desenvolvimento.
4. Referências
[1] GUIRRA, Michelle. Protocolo com Base em Timestamp: controle de concorrência em bancos de dados. 2013. Disponível em: https://www.devmedia.com.br/protocolo-com-base-em-timestamp-controle-de-concorrencia-em-bancos-de-dados/27810. Acesso em: 16 set. 2021.
[2] UFBA. Transações e Concorrência. Disponível em: http://formas.ufba.br/dclaro/mata60/Aula%2012%20-%20Transacoes%20e%20Concorrencia.pdf. Acesso em: 16 set. 2021.
[3] SANTANCHÈ, André; GOMES JUNIOR, Luiz Celso. Controle de Concorrência. 2013. Disponível em: https://www.ic.unicamp.br/~santanch/teaching/db/2016-1/slides/bd11-concorrencia-v04.pdf. Acesso em: 16 set. 2021.
[4] GUIRRA, Michelle. Controle de concorrência entre transações em bancos de dados. 2013. Disponível em: https://www.devmedia.com.br/controle-de-concorrencia-entre-transacoes-em-bancos-de-dados/27756. Acesso em: 16 set. 2021.
[5] MACÊDO, Diego. Controle de Concorrência em Banco de Dados. 2012. Disponível em: https://www.diegomacedo.com.br/controle-de-concorrencia-em-banco-de-dados/. Acesso em: 16 set. 2021.