FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
¿Cuándo usar transacciones?
Buenas, en principio no estoy seguro que esta duda vaya aquí pero, si no es así, que el moderador la ponga donde corresponda.
Resulta que tengo que hacer un desarrollo y estoy formando parte de un pequeño equipo de desarrollo. Bien, hasta aquí nada extraordinario. En una discusión de trabajo de esta mañana estábamos viendo algunas consultas a la BD (insert, update, delete, select y esas cosas), yo hablé un poco de las transacciones y de repente alguien del grupo me dice que "ellos no utilizan transacciones cuando se trata de hacer una consulta (el Select , se entiende), hubo ahí un entredicho respecto del tema y a mí me quedó la duda. Ellos sostienen que no hace falta una transacción en ese caso porque el select no modifica el estado de la BD. Yo contesté, que si bien no hay modificaciones, hay conexión, hay cálculos y hay una respuesta. Mi duda es simple: ¿Una transacción debe usarse siempre que se vaya contra una BD, o en los select's no hace falta? Yo sigo sosteniendo que siempre hay que usarlas, pero... me quedó la duda con esto. Saludos. Santiago.
__________________
Uno es responsable de lo que hace y de lo que omite hacer. |
#2
|
||||
|
||||
Por ejemplo, con Firebird + IBX: pones un componente IBDatabase y un componente IBTransaction, asociados entre ellos. Ajustas los parámetros y... por lo tanto, siempre estás usando transacciones.
Edito: mira esto y esto. |
#3
|
||||
|
||||
En vez de adivinar, se investiga (cuando hay discusiones sobre el tema):
https://en.wikipedia.org/wiki/Isolat...tabase_systems) En resumen: Depende del motor, metodo de conexion y libreria de acceso. Las transacciones y su aislamiento afectan tambien las lecturas.
__________________
El malabarista. |
#4
|
||||
|
||||
A priori, una transacción se utiliza para ejecutar de forma atómica un conjunto de operaciones que deben ejecutarse, o todas juntas o ninguna. Y además debe asegurar que durante el proceso el resto del sistema no puede acceder a los datos "intermedios" de esas operaciones.
Según esta definición, a priori, no tendría mucho sentido realizar una transacción en un SELECT. El problema es que con el tiempo la cosa se ha ido complicando. Hay varios tipos de transacciones, generadas a partir de los bloqueos que producen, y diferentes formas de trabajar con ellas, en los diferentes SGBD's. Casimiro ha comentado el sistema de trabajo de Firebird+IBX. Por ejemplo, el de SQLServer+ADO es diferente. Las transacciones se inician manualmente y en los SELECT no es necesario realizarlas.
__________________
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. |
#5
|
||||
|
||||
Hola, para mi no tiene sentido utilizar transacciones para realizar consultas. Se deberian utilizar solamente cuando es necesario asegurar que se completen una serie de operaciones conjuntas sobre la base. Asegurando que se realizan las dos operaciones o se vuelve al estado anterior.
Por ejemplo.. reservar un pasaje para un usuario y luego cambiar el estado de butaca involucrada a "ocupado" transferir dinero de una cuenta a otra, aumentanto el saldo de una +500 y disminuyendo el de la otra -500 Durante el comienzo de una transaccion se bloquean y duplican registros involucrados para poder realizar un rollback. Una transaccion que incluya un SELECT podria llegar (mas que seguro) a ocupar recursos en la base para poder llegar a deshacer una supuesta operacion sobre los registros aunque sea solo lectura en este caso. Espero haberme explicado. Saludos Nicolas Perichon |
#6
|
||||
|
||||
Cita:
Cita:
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código Únete al grupo Teaming clubdelphi | Colabora mediante Paypal Última edición por Casimiro Notevi fecha: 10-10-2013 a las 10:14:35. |
#7
|
||||
|
||||
Cita:
Aun cuando explicitamente no estes iniciando transacciones, el motor (o la libreria de acceso) *puede* que implicitamente lo haga. Ahora bien, las transacciones cuando se lee no es que le des "BEGIN TRAN" para hacer un SELECT (probablemente el mismo motor hace eso implicito), es que entiendas como el modo de aislamiento esta afectando todo.
__________________
El malabarista. |
#8
|
||||
|
||||
Cita:
Dejando de lado el motor y los componentes de acceso, creo que todos estamos de acuerdo en lo siguiente (si no, vamos a intentar concretarlo para saber de qué hablamos): * Una transacción BLOQUEA la/s tabla/s que usa para escritura. Nadie puede escribir en esas tablas mientras la tabla está en uso. * Todas las operaciones de una transacción se ejecutan de forma atómica. * Al ser atómica y bloqueante, una transacción debe ser lo más rápida y pequeña posible. Volvendo a lo comentado por Casimiro, yo creo que los SELECT no deben ir con transacciones (vuelvo a decir, independientemente de los que luego haga un SGBD o unos componente), porque no cumple nada de lo anterior: + Un SELECT (uno normal, al menos) no debe bloquear para escritura. + Un SELECT ya es de por sí, una operación atómica, unitaria. + Un SELECT no es precísamente (o no tiene porqué serlo) una operación rápida. Otra cosa, y creo que por ahí nos estamos liando, es que un determinado proceso de SELECT (1 o varios), requiera que una determinada tabla (o varias) no se modifique/n, y eso podamos "corregirlo" o "solucionarlo" con una transacción, pero creo que no es el caso habitual. Recordar también que una transación "añade" sobrecarga a una operación (más recursos, más tiempo, más proceso), por lo tanto, por definición, sólo debería usarse cuando sea estríctamente necesario.
__________________
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. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Diferencias entre usar o no Transacciones | MaMu | Varios | 29 | 29-04-2008 00:17:06 |
Cuando y por que usar property | David | OOP | 6 | 01-11-2006 12:07:57 |
¿Cómo usar mejor las transacciones? | ferysil2003 | Firebird e Interbase | 13 | 14-06-2005 11:03:45 |
Como usar transacciones | gario | SQL | 3 | 17-12-2003 20:52:29 |
Como usar las transacciones que es lo correcto | azraelrvg | Firebird e Interbase | 1 | 21-10-2003 23:02:37 |
|