Índice
O manuseio do concorrência Nas aplicações web, é um dos tópicos a que devemos dedicar um pouco de tempo de qualidade, pois pela própria natureza da aplicação podemos encontrar casos em que vários utilizadores têm de interagir com o mesmo elemento.Por si só é interação Não é um problema, o verdadeiro problema surge quando depois de ter modificado ou tocado neste elemento é necessário salvá-lo no banco de dados e então dois ou mais usuários desejam fazer uma ação no mesmo elemento ao mesmo tempo, é aí que nossa lógica deve definir um comportamento para saber qual é a maneira adequada de lidar com isso.
Como explicamos no início, o concorrência É quando dois ou mais atores trabalham em um elemento em nossa aplicação, gerando uma ação contra o banco de dados.
Caso de simultaneidadePodem surgir problemas quando as mudanças são conflitantes, por exemplo: o usuário A salvou um valor, mas o usuário B também estava modificando naquele momento e salvou um valor diferente, aos olhos do usuário A seu conteúdo não foi modificado e aos olhos do usuário B não havia nada que o impedisse de fazer a alteração.
Esses tipos de conflitos podem manchar o desempenho de nossa aplicação aos olhos do usuário, por isso devemos avaliar se as áreas que temos valem a pena ou não programar para a concorrência.
Vamos ver alguns tipos de simultaneidade, desta forma podemos entender um pouco mais que tipo de ações podemos executar em nossos aplicativos:
Concorrência pessimistaEsta abordagem propõe que, ao usar o banco de dados, façamos um bloqueio preventivo do registro em uso, com isso evitamos que vários usuários modifiquem o valor simultaneamente, o problema resulta em que no ambiente web não é possível utilizá-lo a fundo, pois como não há estados não sabemos realmente se o bloqueio foi aplicado ou removido até nos comunicarmos com o servidor, gerando confusão e lentidão no uso.
Afluência otimistaEsta outra abordagem ao invés faz algo um pouco mais compatível com a web, ao modificar, antes de salvar no banco de dados verifica se os dados não foram modificados desde o momento em que foi feita a leitura, para isso fazemos comparação de valores de registro e um campo associado que contém um carimbo de data / hora com data, hora e segundos para maior precisão.
ASP.NET MVC Não suporta a abordagem pessimista, portanto devemos trabalhar com a otimista, para isso devemos fornecer nossas estruturas com campos de data para salvar a última vez que foi modificado, para que possamos saber se o valor foi alterado após obtermos o registro e antes de salvá-lo, com isso podemos obter um alerta e assim decidir se substituímos ou não esses valores.
Vamos ver um pequeno exemplo de código de como podemos validar isso:
Ao final deste tutorial já sabemos um pouco mais sobre concorrência em bancos de dados e como resolver o problema em ASP.NET MVC.