Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-10-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Question ¿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.
Responder Con Cita
  #2  
Antiguo 08-10-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.051
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita
  #3  
Antiguo 08-10-2013
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.912
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
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.
Responder Con Cita
  #4  
Antiguo 09-10-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
Responder Con Cita
  #5  
Antiguo 09-10-2013
Avatar de Pericles
Pericles Pericles is offline
Miembro
NULL
 
Registrado: sep 2013
Ubicación: Buenos Aires, Argentina
Posts: 24
Poder: 0
Pericles Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 09-10-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.051
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Pericles Ver Mensaje
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.
Siempre deben usarse las transacciones, incluso en consultas. Imagina que estás sacando un informe de balance contable y mientras está la impresora ocupada, alguien añade/elimina/edita algún registro, te volverás loco para encontrar el fallo, deberás revisar todos los registros uno por uno para encontrar el "error" de cálculo, que no es ningún error.

Cita:
Empezado por Pericles
Durante el comienzo de una transaccion se bloquean
Bueno, eso dependerá del SDBMS que uses. Con firebird no se bloquea nada (salvo que quieras hacerlo explícitamente)

Última edición por Casimiro Notevi fecha: 10-10-2013 a las 10:14:35.
Responder Con Cita
  #7  
Antiguo 10-10-2013
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.912
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por Pericles Ver Mensaje
Hola, para mi no tiene sentido utilizar transacciones para realizar consultas....
Dicho de otra forma: No es lo que para *ti* tenga sentido, sino como opera y cuales son las reglas de cada motor de base de datos/app/operación de datos.

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.
Responder Con Cita
  #8  
Antiguo 10-10-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Imagina que estás sacando un informe de balance contable y mientras está la impresora ocupada, alguien añade/elimina/edita algún registro, te volverás loco para encontrar el fallo, deberás revisar todos los registros uno por uno para encontrar el "error" de cálculo, que no es ningún error.
No acabo de entender cual es el problema en la situación que comentas Casimiro.

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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 09:10:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi