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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-05-2017
blaiselaborde blaiselaborde is offline
Miembro
 
Registrado: nov 2006
Ubicación: Reino Unido
Posts: 40
Poder: 0
blaiselaborde Va por buen camino
Conexión a BBDD desde DataSnap

Hola;

Tengo un problema con la conexión a la Base de Datos desde mi DataSnap Server:

La Base de Datos es Oracle y el componente de conexión es DOA (Direct Oracle Access).

Si uso un DataSnap Server para TCP/IP el TDSServerClass su LifeCycle es "Server" y cuando se conectan los clientes, los accesos a la Base de Datos por el componente ServerSession del DOA, son secuenciales y por orden de llamada. Este hecho hace que, cuando se ejecuta una Query pesada (o sea que tarda mucho su ejecución), las consultas, de los otros clientes, tienen que esperar a que éste termine para seguir su turno.

Por el contrario, si utilizo el DataSnap para HTTP, el TDSServerClass su LifeCycle es "Invocation", se crea un componente de Conexión con la Base de Datos por cada cliente que accede a uno de los Métodos. Esto salva el obstáculo anterior, pero está causando que los administradores de la BBDD se quejen porque dicen que hay demasiadas sesiones abiertas y que no es normal que se deba abrir una Sesión contra la BBDD para lanzar sólo una Query.

Alguno de ustedes me puede dar alguna sugerencia para solucionar este tema?

Muchas gracias.
Responder Con Cita
  #2  
Antiguo 04-05-2017
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Una pregunta que podría cambiar la perspectiva es... ¿El problema es que se abren muchas sesiones o el problema es que se quedan abiertas esas sesiones?

Digo, es que es normal que se abran muchas sesiones debido a que se están abriendo instancias en múltiples hilos, aunque sí se debe cuidar que éstas sean cerradas y los objetos sean liberados. Eso sí, procurando que estas consultas y procesos no sean muy pesados.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 04-05-2017
WHILENOTEOF WHILENOTEOF is offline
Miembro
 
Registrado: mar 2008
Posts: 229
Poder: 17
WHILENOTEOF Va camino a la fama
Firedac tiene una característica y es la de poder reutilizar conexiones para escenarios como el que explicas, y que además sirven para que sea más rápida establecer la conexión. Busca en internet sobre ello porque recuerdo haber leído uno o dos artículos sobre su uso.
Responder Con Cita
  #4  
Antiguo 05-05-2017
blaiselaborde blaiselaborde is offline
Miembro
 
Registrado: nov 2006
Ubicación: Reino Unido
Posts: 40
Poder: 0
blaiselaborde Va por buen camino
Cita:
Empezado por jhonny Ver Mensaje
Una pregunta que podría cambiar la perspectiva es... ¿El problema es que se abren muchas sesiones o el problema es que se quedan abiertas esas sesiones?

Digo, es que es normal que se abran muchas sesiones debido a que se están abriendo instancias en múltiples hilos, aunque sí se debe cuidar que éstas sean cerradas y los objetos sean liberados. Eso sí, procurando que estas consultas y procesos no sean muy pesados.


Muchas gracias por tu interés. Lo cierto es que me cuido mucho de cerrar todo lo que se abre, como regla básica en Delphi. Y la crítica que recibo de los Administradores de BBDD es que no debería abrirse una conexión sólamente por una Query, que genera un incremento del número de Sesiones abiertas a medida que entran los clientes. Entiendo que es la forma de trabajar con HTTP.

La otra opción que tengo es mantener una Sesión común para todos los clientes, al buen estilo TCP/IP, pero se me congestionan los accesos con las Queries pesadas.

He estado pensando en tener un Pool controlado de Sesiones abiertas, pero no sé qué tan práctico sería, además que su desarrollo no es nada fácil por el control que habría que tener sobre éllos.
Responder Con Cita
  #5  
Antiguo 05-05-2017
blaiselaborde blaiselaborde is offline
Miembro
 
Registrado: nov 2006
Ubicación: Reino Unido
Posts: 40
Poder: 0
blaiselaborde Va por buen camino
Cita:
Empezado por WHILENOTEOF Ver Mensaje
Firedac tiene una característica y es la de poder reutilizar conexiones para escenarios como el que explicas, y que además sirven para que sea más rápida establecer la conexión. Busca en internet sobre ello porque recuerdo haber leído uno o dos artículos sobre su uso.
Muchas gracias. Investigaré el caso que me comentas.
Responder Con Cita
  #6  
Antiguo 05-05-2017
WHILENOTEOF WHILENOTEOF is offline
Miembro
 
Registrado: mar 2008
Posts: 229
Poder: 17
WHILENOTEOF Va camino a la fama
Aquí por ejemplo se habla de lo que comentaba en el post anterior.
Responder Con Cita
  #7  
Antiguo 05-05-2017
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por WHILENOTEOF Ver Mensaje
Aquí por ejemplo se habla de lo que comentaba en el post anterior.
En la documentación que ha dejado WQHILENOTEOF se nota que el manejo de pool de conexiones es mucho más sencillo de lo que parece... lo único a tener en cuenta es lo que ya estás teniendo en cuenta desde el inicio del POST. Que los hilos en datasnap están siendo administrados por el ciclo de vida que le asignas a la sesión.

Sería muy enriquecedor si pruebas la opción como la comenta WHILENOTEOF y nos comentas qué tal te va o cómo te queda.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #8  
Antiguo 05-05-2017
blaiselaborde blaiselaborde is offline
Miembro
 
Registrado: nov 2006
Ubicación: Reino Unido
Posts: 40
Poder: 0
blaiselaborde Va por buen camino
<<<<<<<<<<<<<<<<<<
Responder Con Cita
  #9  
Antiguo 05-05-2017
blaiselaborde blaiselaborde is offline
Miembro
 
Registrado: nov 2006
Ubicación: Reino Unido
Posts: 40
Poder: 0
blaiselaborde Va por buen camino
>>>>>>>>>>>>>>>>>>>
Responder Con Cita
  #10  
Antiguo 05-05-2017
blaiselaborde blaiselaborde is offline
Miembro
 
Registrado: nov 2006
Ubicación: Reino Unido
Posts: 40
Poder: 0
blaiselaborde Va por buen camino
Gracias por sus comentarios. Han sido muy enriquecedores y me han permitido encontrar la propiedad Pooling en mi componente (DOA) la cual tiene muy buena pinta:

Muestra que existe un par de vías para manejar el Pool:
  • -
Internal: Dónde el mismo componente maneja las Sesiones. Eso sí, toca hacer el Submit y el Rollback por uno mismo antes de cerrar la Sesión.
  • -
MTS (Microsoft Transaction Server) environment: Para versiones de Oracle superiores a 8i, controladas por Oracle de tal modo que no permite hacer el Commit y el Rollback manualmente:

Cita:
Microsoft Transaction Server support
The TOracleSession component provides support for the Oracle Services for MTS. This
service allows you to make use of 2 important concepts of MTS: resource pooling and
transaction control. By setting the Pooling property to spMTS, physical database sessions will
be pooled so that they can be shared between multiple MTS clients. This minimizes the
number of concurrent sessions, and prevents that each client request performs a new logon.
Furthermore, transactions are now controlled at a higher level by MTS, which even allows
distributed transactions in a heterogeneous environment.
Responder Con Cita
  #11  
Antiguo 05-05-2017
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
¡Estupendo!, me alegra mucho que se haya gestado un norte en este sentido, gracias por compartir.

Nota: Me he reído con el toque de misterio... <<<<< >>>>>
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #12  
Antiguo 05-05-2017
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.457
Poder: 20
newtron Va camino a la fama
Cita:
Empezado por jhonny Ver Mensaje
Nota: Me he reído con el toque de misterio... <<<<< >>>>>
Yo ya estaba mirando primero para la izquierda y luego para la derecha a ver qué había....
__________________
Be water my friend.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
TRbajar con dbexpress y conexion a 2 bbdd alopete Conexión con bases de datos 2 20-03-2009 08:25:44
Conexión con BBDD SQL 2005 express jmgc1982 Conexión con bases de datos 5 27-05-2008 08:41:31
Error con la conexión a la BBDD david.rguez Conexión con bases de datos 3 13-07-2007 11:10:52
conexion a bbdd con query y table ElDioni Conexión con bases de datos 9 22-09-2005 17:06:02
Conexión BBDD remota Ivr Conexión con bases de datos 3 16-07-2004 23:17:33


La franja horaria es GMT +2. Ahora son las 01:45:58.


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