/ / Armazenando tokens de bloqueio de registro no ASP.NET - asp.net, asp.net-mvc, simultaneidade, bloqueio de registro

Armazenando Tokens de Registro de Registro no ASP.NET - asp.net, asp.net-mvc, concorrência, bloqueio de registro

No aplicativo em que estou trabalhando atualmente,É possível que vários usuários desejem editar algo ao mesmo tempo, o que significa que precisamos implementar o bloqueio otimista. No entanto, para este aplicativo, o item que está sendo editado é um protocolo científico que contém registros de várias tabelas diferentes no banco de dados.

Como tal, queremos ser capazes de indicar otodo o protocolo foi bloqueado para edição por um único usuário que leva à minha pergunta: seria o método preferido de fazer isso para o evento as edições no nível do banco de dados (por exemplo, ter uma tabela com o id único do protocolo e verificar se ele foi bloqueado) ou seria aceito rastrear os protocolos atualmente bloqueados no próprio servidor da Web na memória?

Atualmente, esperamos apenas cerca de 100 usuários (20 ou mais simultâneos) para o aplicativo, mas esse número pode aumentar no futuro, por isso, estamos procurando usar a opção mais escalonável.

Respostas:

5 para resposta № 1

Essa questão também depende de quão bem arquitetada é sua base de código?

Se todas as chamadas para modificar esses registros forempor meio de um único ponto de entrada, então sim, eu recomendo manter todo o código de bloqueio inteiramente em seu aplicativo para que você possa manter seu banco de dados como um armazenamento de dados burro.

Se você tiver vários pontos de entrada que podem modificar suas tabelas, você precisará implementar o bloqueio no nível do banco de dados.


3 para resposta № 2

Eu iria implementar uma tabela no banco de dados que gerenciava o bloqueio. Por exemplo:

Linhas: ProtocolID, EditingBeginDate, EditingEndDate

Então você pode simplesmente consultar quando uma função de ediçãono aplicativo é tentado e se o protocolo dado não tiver um período de tempo completo, você sabe que ele ainda está sendo editado por um determinado usuário. Você pode implementar uma quantidade específica de tempo em que as sessões de edição devem ser fechadas para evitar registros permanentemente bloqueados Apenas uma sugestão :-D


2 para resposta № 3

Então, parece que você precisa de trancas de granulação grossa.

Se você quiser ter a solução mais escalável,precisa manter as informações de bloqueio no banco de dados ou no cache distribuído (o cache distribuído será mais rápido nesse caso). A abordagem in-memory não é escalável - vai falhar no caso de precisar de mais servidores. Não se esqueça também de introduzir tempos limite de bloqueio para evitar possíveis impasses.