A concorrência de dados refere -se ao acesso simultâneo de dados compartilhados por vários usuários ou processos. Esse acesso pode levar a vários problemas se não for gerenciado corretamente. Os aspectos principais são:
*
Acesso simultâneo: Várias entidades (usuários, transações, processos, threads) estão interagindo com os mesmos dados aproximadamente ao mesmo tempo.
*
Dados compartilhados: Os dados que estão sendo acessados são compartilhados entre essas múltiplas entidades. Esses dados podem residir em um banco de dados, um arquivo, memória ou qualquer outro armazenamento compartilhado.
*
potencial para conflitos: A principal preocupação com a simultaneidade é o potencial de conflitos. Esses conflitos surgem quando várias entidades tentam modificar os mesmos dados simultaneamente. Isso pode levar a resultados inconsistentes, incorretos ou imprevisíveis. O exemplo clássico é o problema da "atualização perdida" em que um atualiza substitui o outro.
Tipos de mecanismos de controle de simultaneidade: Várias técnicas são usadas para gerenciar e resolver problemas de simultaneidade, incluindo:
*
bloqueio: Essa é uma abordagem comum em que uma entidade adquire uma trava nos dados antes de acessá -los, impedindo que outras entidades o modifiquem até que a fechadura seja liberada. Existem diferentes mecanismos de travamento, como bloqueios exclusivos (apenas uma entidade pode acessar), bloqueios compartilhados (várias entidades podem ler, mas não escrevem) e várias granularidades de bloqueio (nível de linha, nível de página, nível de mesa).
*
Controle de concorrência otimista (OCC): Essa abordagem assume que conflitos são raros. Uma entidade lê os dados, faz alterações e verifica antes de cometer as alterações se os dados foram modificados por outra entidade. Se um conflito for detectado, a transação será revertida.
*
Controle de Concorrência Pessimista (PCC): Essa abordagem pressupõe que os conflitos sejam frequentes. Ele usa mecanismos de travamento agressivamente para impedir que os conflitos aconteçam em primeiro lugar.
*
Versão: Cada versão dos dados é rastreada, permitindo que vários usuários trabalhem nos mesmos dados simultaneamente sem interferir diretamente entre si. Os conflitos são resolvidos mesclando ou selecionando a versão apropriada.
*
Timestamping: Cada transação é atribuída um registro de data e hora e o sistema garante que as transações sejam processadas em ordem de data e hora, impedindo conflitos.
Consequências do mau controle de simultaneidade: *
Inconsistência de dados: Os dados ficam corrompidos ou não confiáveis devido a atualizações conflitantes.
*
Atualizações perdidas: Uma atualização substitui outra, resultando na perda de dados.
*
leituras sujas: Uma transação lê dados que foram modificados por outra transação, mas ainda não estão comprometidos.
*
leituras não repetíveis: Uma transação lê os mesmos dados várias vezes, mas os dados foram alterados por outra transação entre leituras.
*
Phantom lê: Uma transação executa uma consulta duas vezes, e a segunda consulta retorna linhas adicionais que foram adicionadas por outra transação entre as duas consultas.
Em resumo, a concorrência de dados é um aspecto crítico do desenvolvimento de software, especialmente em sistemas com vários usuários ou processos acessando recursos compartilhados. A implementação de mecanismos adequados de controle de simultaneidade é essencial para garantir a integridade dos dados e a confiabilidade do aplicativo.