Ir para o conteúdo principal

Tratamento de Concorrência de Dados no DB

Data de elaboração 16/09/2021
Responsável pelo estudo
  1. Alan da Silva Souza (Assessor)
  2. Gabriel Santi Binda (Assessor)
  3. Raissa de Sousa Stolduski (Assessor)
  4. Taillon Miguel Gonçalves (Assessor)
Equipe do estudo Tambaqui
Alvo Bancos de dados
Origem
  • Melhoria: melhorar alguma implementação já feita (neste caso aponte no campo documentos correlatos o documento do sistema)
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.

dwadwaFigura 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.