FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Diferencias entre usar o no Transacciones
Como bien dice el título, me gustaria que alguien a groso modo me explicase la diferencia entre usar transacciones o no en el diseño de una aplicacion de base de datos, multiusuario, basándose en que seria desarrollada con Delphi7 empleando como engine mySQL 4.1.
Pregunto esto, porque hice una aplicación sin usar transacciones y actualmente la usan 25 usuarios en simultáneo y hace ya más de un año que no ha habido ningun error, ningun problema. Saludos y gracias
__________________
|
#2
|
||||
|
||||
Pues yo creo que depende de muchas cosas. Es posible que por la naturaleza del sistema, los usuarios no se "estorben" unos a otros de manera que casi se pueda considerar una aplicación monousuario.
Te voy a dar un ejemplo concreto, en el que no puedo vivir sin transacciones. Yo manejo inscripciones a cursos escolares y en época de inscripciones la demanda es muy fuerte. Un alumno ingresa al sistema y se le presenta una lista de los grupos disponibles, esto es, de los que aún tienen lugares. El alumno escoge uno y se procede a la inscripción, que consta, básicamente de dos operaciones: 1. Se inserta un registro en una tabla de inscripciones 2. Se disminuye un lugar en el grupo donde se inscribió. Todo muy sencillo. Pero toma en cuenta que entre el momento en que el alumno ve la lista de grupos y el momento en que da click en el grupo deseado, otros alumnos pudieron haber seleccionado el mismo grupo y agotado los lugares. Eso es bastante probable, al menos en mi caso, porque estamos hablando de cientos de accesos simultáneos al sistema. Si lo dejo pasar tal cual, estaría sobrellenando el grupo. Entonces lo que hago es meter esas dos operaciones en una transacción. Una vez que decremento el número de lugares, vuelvo a ver el cupo, si éste es negativo, es porque ya se habían agotado los lugares. Entonces hago un rollback y le mando un mensaje al alumno. Yo realmente no manejo mucho el tema, pero creo que se puede resumir así: en una transacción debes poner aquellas operaciones en donde no puede fallar ninguna, o todas son exitosas o todas fallan. Si tienes una situación así, entonces debes usar transacciones. // Saludos |
#3
|
||||
|
||||
Podria decirse que al usar transacciones lo que busco es lograr "conciliar" las operaciones de datos entre usuarios?
Saludos
__________________
|
#4
|
||||
|
||||
Las transacciones son la forma más sencilla de encadenar operaciones sobre la BD que no se puedan hacer de forma independiente.
Si yo tengo que ejecutar A,B y C siempre en ese orden y siempre todas o ninguna es mucho más sencillo, claro y mantenible meterlas en una transacción que mediante if-else revisar si todo ha ido bien, si puedo continuar... Yo lo veo como una forma de ahorrar comprobaciones. |
#5
|
||||
|
||||
Yo creo que esa es la clave.
Adicionalmente te pueden servir utilizando diferentes "Isolation Level" para resolver algunos problemas de bloqueos entre los usuarios. Es un tema que ya hemos discutido otras veces, y recuerdo uno de los últimos hilos que estaba muy interesante.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#6
|
||||
|
||||
Cita:
__________________
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Diferencias entre Firebird e Interbase | David | Firebird e Interbase | 6 | 28-04-2007 16:14:47 |
Diferencias entre Delphi | Rabata | Varios | 4 | 27-10-2005 17:02:05 |
Diferencias entre OnActivate y OnPaint | FunBit | OOP | 4 | 02-09-2005 16:40:22 |
Diferencias Entre Componentes Ado Y Dbexpress | mendozasoftware | Firebird e Interbase | 6 | 06-05-2005 02:43:14 |
Diferencias entre FREE y DESTROY | bustio | OOP | 1 | 23-06-2004 05:48:35 |
|