Cargando



ASP.NET MVC - Concurrencia en Base de Datos

En este tutorial veremos el tema de la concurrencia en las bases de datos en nuestras aplicaciones ASP.NET MVC.


jul 13 2014 00:42
Profesional
jul 14 2014 19:20
El manejo de la concurrencia en las aplicaciones web es uno de los temas a los que debemos dedicarle un poco de tiempo de calidad, ya que por la misma naturaleza de la aplicación puede que nos encontremos casos en los cuales varios usuarios tengan que interactuar con el mismo elemento.

Por si sola esta interacción no es un problema, el verdadero problema llega cuando luego de haber modificado o tocado este elemento se necesite guardar en base de datos y entonces dos o más usuarios quieran hacer una acción sobre un mismo elemento al mismo tiempo, ahí es donde nuestra lógica debe definir un comportamiento para saber cuál es la forma adecuada para manejar esto.

Concurrencia en Bases de Datos


Como habíamos explicado al inicio, la concurrencia es cuando dos o más actores trabajan sobre un elemento en nuestra aplicación generando una acción contra la base de datos.

Caso de concurrencia
Se puede presentar problemas cuando los cambios son conflictivos, por ejemplo: el usuario A guardo un valor, pero el usuario B estaba en ese momento modificando también y guardó un valor diferente, a ojos del usuario A su contenido no fue modificado y a ojos del usuario B no había nada que le impidiera hacer su cambio.


Este tipo de conflictos pueden empañar el rendimiento de nuestra aplicación a ojos del usuario, por ello debemos evaluar si las áreas que se tienen valdrán la pena o no programar para la concurrencia.

Tipos de Concurrencia


Veamos algunos tipos de concurrencia, de esta forma podremos entender un poco más que tipo de acciones podemos ejecutar en nuestras aplicaciones:

Concurrencia pesimista
Este enfoque plantea que al utilizar la base de datos hagamos un bloqueo preventivo del registro en uso, con ello evitamos que múltiples usuarios modifiquen el valor de forma simultánea, el problema resulta en que en el entorno web esto no es posible emplearlo a fondo, ya que como no hay estados no sabemos realmente si el bloqueo fue aplicado o removido hasta que nos comunicamos con el servidor, generando confusión y lentitud en el uso.

Concurrencia optimista
Este otro enfoque en cambio hace algo un poco más compatible con la web, al momento de modificar, antes de guardar en la base de datos verifica que los datos no hayan sido modificados desde el momento en que se hizo la lectura, para ello hacemos comparación de valores del registro y de un campo asociado que lleve una huella temporal con fecha, hora y segundos para mayor exactitud.


¿Cómo lo resuelve ASP.NET MVC?


ASP.NET MVC no da soporte para el enfoque pesimista, por lo que debemos trabajar con el optimista, para ello debemos dotar a nuestras estructuras de campos de fecha para guardar la última vez que fue modificado, así podremos saber si el valor fue cambiado luego que obtuvimos el registro y antes de guardarlo, con ello podemos obtener una alerta y así decidir si sobrescribimos o no esos valores.

Veamos un pequeño ejemplo en código de cómo podríamos validar esto:

asp_concurrencia.jpg


Notamos entonces que validamos al momento de hacer un cambio en la base de datos si el campo fue modificado luego que hicimos la lectura, en caso de ser así levantamos una excepción, con ello ya podremos tomar las acciones correspondientes, también dejamos espacio para poder trabajar las diferentes excepciones que se puedan generar.

Finalizando este tutorial ya conocemos un poco más sobre concurrencia en bases de datos y como trabajar el problema en ASP.NET MVC.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X