¿Cuál es la mejor manera de manejar la concurrencia en una aplicación de base de datos de acceso?

StackOverflow https://stackoverflow.com/questions/4681280

Pregunta

Hace un tiempo, me escribió una aplicación utilizada por varios usuarios para manejar la creación de oficios. No he hecho el desarrollo desde hace algún tiempo, y no puedo recordar cómo he conseguido la concurrencia entre los usuarios. Por lo tanto, estoy buscando algunos consejos en cuanto a diseño.

La aplicación original tenía las siguientes características:

  • Un cliente pesado por el usuario.
  • Una única base de datos.
  • El acceso a la base de datos para cada usuario a insertar / actualizar / operaciones de borrado.
  • Una rejilla en la aplicación que refleja la tabla oficios. Esa cuadrícula se actualiza cada vez que alguien cambia un acuerdo.
  • Estoy usando WPF.

Esto es lo que me pregunto:

  1. Estoy en lo correcto en el pensamiento de que no deben preocuparse por la conexión a la base de datos para cada aplicación? Teniendo en cuenta que existe un producto único en cada uno, yo esperaría una conexión por cada cliente con ningún problema.

  2. ¿Cómo puedo ir sobre la prevención de la concurrencia de los accesos? Creo que debería fijar la hora de modificar los datos, sin embargo, no recuerda cómo.

  3. ¿Cómo puedo configurar la red para actualizar automáticamente cada vez que se actualiza mi base de datos (por otro usuario, por ejemplo)?

Gracias de antemano por su ayuda!

¿Fue útil?

Solución

  1. Tenga en cuenta el aprovechamiento de agrupación de conexiones para reducir # de conexiones. Ver: http://msdn.microsoft.com/en-us/library/8xx3tyca .aspx

  2. Bloqueo de lo más tarde posible y la liberación tan pronto como sea posible para maximizar la concurrencia. Puede utilizar TransactionScope (véase: http://msdn.microsoft. com / es-es / library / system.transactions.transactionscope.aspx y http://blogs.msdn.com/b/dbrowne/archive/2010/05/21/using-new-transactionscope-considered-harmful.aspx ) si tiene varias acciones db que deben ir juntos para gestionar la consistencia o simplemente manejarlos de DB procedimiento almacenado. Mantenga su sencilla consulta. Siga los siguientes consejos para entender cómo el trabajo de bloqueo y cómo reducir la contención de recursos y el punto muerto: http: // www .devx.com / gethelpon / 10MinuteSolution / 16488

  3. No estoy seguro de otra db, pero para SQL, puede utilizar SQL Dependencia, consulte http://msdn.microsoft.com/en-us/library/a52dhwx7 (v = vs.80) .aspx

Otros consejos

La concurrencia se concede normalmente por el DBMS utilizando cerraduras. Cerraduras son un tipo de semáforo que otorguen el bloqueo exclusivo de un determinado recurso y permitir que otros accesos que se restrinja o en cola (sólo limitado en el caso de que utilice lee uncommited).

El número de conexiones en sí no representa un problema mientras no se está alcanzando alturas donde es posible que toque en el max_connections ajuste de su DBMS. De lo contrario, es posible obtener un problema al conectar a la misma para fines de mantenimiento o para apagarlo.

DBMSes suelen utilizar un concepto de cualquiera de los bloqueos de tabla (MyISAM) o bloqueos de registro (InnoDB, la mayoría de los otros DBMS). El tipo de bloqueo determina el volumen de la cerradura. bloqueos de tabla puede ser muy rápido, pero por lo general se consideran inferiores a la fila cerraduras nivel.

cerraduras nivel de fila se producen dentro de una transacción (implícito o explícito). Al iniciar manualmente una transacción, que comience su ámbito de transacción. Hasta que se cierre manualmente el ámbito de transacción, todos los cambios que realice serán atributos a esta transacción exacta. Los cambios que realice también obedecerán al ÁCIDO paradigma .

ámbito de transacción y la forma de utilizarlo es un tema demasiado tiempo para esta plataforma, si quieres, puedo publicar algunos enlaces que llevan más información sobre este tema.

Para las actualizaciones automáticas, la mayoría de las bases de datos admite algún tipo de mecanismo de activación, que es el código que se ejecuta en acciones específicas en la base de datos (por ejemplo, la creación de un nuevo registro o el cambio de un registro). Puede publicar su código dentro de este disparador. Sin embargo, sólo se debe informar a una aplicación recieving de los cambios, no es realmente "hacer" los cambios desde el gatillo, incluso si el lenguaje puede hacer que sea posible. Recuerde que la acción que provocó el código se suspende hasta que termine con su código de activación. Esto significa que un disparador magra es mejor, si es necesario en absoluto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top