Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-09-2012
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 18
rolandoj Va por buen camino
Transacciones en Zeos. Conviene una por Conexión ?

Hola a todos,

Investigando sobre Zeos me encontré con un tema que me sorprende. Es una pregunta para veteranos de Zeos; pero, como es igualmente clave para principiantes explicaré en detalle el concepto antes de preguntar:

Parte vital del trabajo normal que uno hace al grabar datos en una Base de Datos es la inserción, borrado y modificación de registros.

Por ejemplo, y típicamente, un documento está formado por un registro en una tabla maestra y múltiples registros hijos en varias tablas detalle. Por integridad de la información, bajo el principio de "todo se graba o no se graba nada", todos los registros de las diversas tablas involucradas se guardan bajo una sola transacción.

Eso, también usualmente, se hace entre dos puntos de código de nuestro programa con un comando Startransaction y un comando Commit, que suministra el componente de conexión a la base de datos. En el caso de Zeos ese componente es TZConnection.

Por tanto, la secuencia de trabajo con un componente TZConnection (u equivalente) debería ser :

Configurar los parámetros de conexión
Abrir la conexión (propiedad Connected a True)

Por cada ocasión en que se deba grabar un bloque de registros :

Invocar el método StartTransaction
Efectuar las operaciones de inserción, borrado y modificación de registros.
Invocar el método Commit
Si hay errores, invocar el método Rollback para restaurar todo al estado inicial

Finalmente, cerrar la Conexión (propiedad Connected a True)

Ahora viene la pregunta :

Según lo que leí, el método Commit en Zeos usa un "commit suave"; eso significa que los recursos que utilizó en el transcurso de la transacción, típicamente copias temporales de registros involucrados, no son liberados (al menos para el caso de Firebird que era el ejemplo que ilustraban). Esto implica que en tablas grandes, pasado algún tiempo, el rendimiento de la base de datos se degrada.

Para que los recursos temporales usados en una transacción se liberen, en Zeos, se requiere emitir un "commit duro", y ese comando solo lo emite en Zeos cuando se cierra la conexión

La conclusión que saco es que, para efectos de mantener un buen rendimiento, la metodología en Zeos sería que una vez abierta la conexión se iniciara una transacción y una vez terminada esta se cerrara la conexión; es decir, usar una sola transacción por conexión

Sin embargo, eso va en contravía del modelo tradicional de mantener abierta la conexión mientras se efectuan multiples transacciones. El modelo tradicional parte de que al abrir la conexión se colocan en cache una serie de recursos que posteriormente permite mayor velocidad en las operaciones.

Así las cosas, la gran pregunta es : Conviene en Zeos manejar solo una transacción por conexión, sacrificando el cache de inicio de conexión; o es mejor mantener el modelo tradicional, sacrificando el rendimiento directamente sobre la Base de Datos.

Ciertamente no es una pregunta facil. Será que alguien ha participado en discusiones de este tema ?. Alguien sabe de estadísticas a favor o en contra de eso ?.

Bueno, alguien puede confirmar la interpretación que hago al final ?. Es una traducción de un material escrito de manera algo vaga en Inglés y quizás estoy malinterpretando algo

Última edición por rolandoj fecha: 27-09-2012 a las 16:10:14. Razón: El foro no respetó los saltos de línea en el envío inicial
Responder Con Cita
 



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
Problema con transacciones, sqlite y componentes ZEOS zoide Conexión con bases de datos 10 16-11-2009 13:10:05
transacciones y ZEOS david_uh Varios 0 26-05-2007 19:44:03
Transacciones - Que Conviene mas? Paradiso Firebird e Interbase 2 19-07-2006 14:35:21
Transacciones FireBird con Zeos vichovi Conexión con bases de datos 3 13-07-2005 08:49:29
Como Realizar transacciones con Zeos o en Delphi Dayvis MySQL 1 22-10-2004 03:00:47


La franja horaria es GMT +2. Ahora son las 08:52:44.


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