Boletín mugperu Digital - Julio 2009!
  Search 
Monday, May 21, 2012 ..:: Foros de Discusión ::.. Register  Login
Foros MUGPERU Minimize
Subject: Sobre Concurrencia en SqlServer
Prev Next
You are not authorized to post a reply.

Author Messages
BlackDevPeru
Posts:54

20/04/2005 01:08 PM  

Hola.Nuevamente yo....

Como puedo controlar la concurrencia que puede ocurrir en una BD Sql?. Quiero controlar que el ingreso de datos a un formulario sea la manera mas segura posible. Por decir, un modulo de pagos tipo facturacion, donde a la vez esten ingresando 5, 6 o 100 usuarios a la vez... Como puedo saber que todos estan viendo la informacion real y actualizando el o los registros que corresponde?...

Yo estoy desarrollando un sistema de facturacion en 3 capas, y es muy importante el manejo de concurrencia, asi como de consistencia.

Si alguien sabe sobre este tema, les agradeceria... y si es en VB.NET con Sql Server y en ambiente web, seria excelente... Muchisimas gracias.

roberth20032002
Posts:88

27/04/2005 01:31 PM  

Hola, te cuento que la experiencia que me ha dado el estar metido en lo que es desarrollo de software usando Sql, es muy buena. Y con respecto a la concurrencia de varios usuarios a la vez en a una sola BD (tabla), no es problema, y el hecho de que vean la ultima información actualizada o ingresada, tampoco es problema, por que al actualizar tus consutas te mostrara los cambios y mostrara a todos los usuarios que ingresen.

rcrbalcazar
Posts:130

29/04/2005 08:16 AM  

Hola, ciertamente para el problema de la concurrencia tienes varios escenario basicos:

1. Los usuarios hacen consultan la base de datos, en este caso no exusten problemas de concurrencia, ya que nadie esta modificando la base.

2. Los usuarios hacen consultas y solo uno actualiza algun(os) registros de la base, en este caso el resto de usuarios no siempre pueden ver los cambios MAGICAMENTE, en la version anterior de ADO exite un tipo de recordset denominado dinamico, este si te permite verlos cambios de realizados en la base puesto que este se mantiene en contacto con la base (es un esquema de data conectada), y tambien maneja un mecanismo de bloqueo de los registros en edicion (Optimista y Pesimista) de tal manera que no ocurran problemas porque dos usuarios estan modificando el mismo registro.

Sin embargo sabemos muy muy bien que actualmente se trabaja muchisimo mas con aplicaciones DESCONECTADAS, es decir que no estan en permanente conversacion con la base de datos y no mantienen una conexion abierta. Estas aplicacion son mejores ya que optimizan el uso de recursos de servidor. Ahora bien en este tipo de aplicaciones si conllevan el problema de la concurrencia. Sabemos muy bien que ADO.Net esta pensado para trabajar con data desconectada. Aqui se manejan varias formas de controlar la concurrencia:

a. Agregar un campo de tipo timestamp a la tabla que va a soportar la concurrencia (factura, Cliente, etc.) por cada consulta que extraiga datos de la base se debe obtener el ultimo valor del timestamp y se envia al cliente, es decir el cliente tendra el timestamp 23 (por ejemplo), si otro cliente desea obtener info de la misma tabla pues tambien obtendra el timestamp 23. Ahora si alguno de ellos realiza una modificacion y la envia a la base de datos (mediante un procedure), el procedure de actualizacion debe hacer una verificacion del timestamp enviado (23) y el actual del registro (23) y una vez hecha la actualizacion tendra que modificar el valor del timestamp (que pasara a ser 67, por ejemplo) de esa manera si alguien mas desea actualizar el mismo registro (el segundo usuario, por ejemplo, que tambien obtuvo el timestamp 23) la comparacion del timestamp enviado (23) sera contra el nuevo valor (67) con lo cual se devolvera un error al cliente indicandole que alguien ha modificado el registro mientras el estaba mofdificandolo, en tal caso se le podria devolver al usuario los nuevos datos del registro.

Existen varios metodos para controlar estos casos (ADO.Net maneja tambien su propio metodo), te he descrito solo uno de ellos, pero debes tener en cuenta que este problema se da principalmente cuando se trata de data desconectada.

Puedes revisar los siguientes articulos:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/architec/8_ar_sa2_5nqd.asp

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconOptimisticConcurrency.asp

Saludos.


Richard Rodriguez
You are not authorized to post a reply.



ActiveForums 3.7
        
Copyright 2001-2012 MUGPERU   Terms Of Use  Privacy Statement