ASP.NET MVC - Concorrência de banco de dados

Í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:

Percebemos então que validamos ao fazer uma alteração na base de dados se o campo foi modificado após termos feito a leitura, se assim for levantamos uma exceção, com isso poderemos realizar as ações correspondentes, também deixamos espaço para poder trabalhar nas diferentes exceções que possam ser geradas.
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.

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave