Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Varios hilos atacando a Firebird (https://www.clubdelphi.com/foros/showthread.php?t=68832)

mcs 09-07-2010 10:55:48

Varios hilos atacando a Firebird
 
Buenos días,

Estoy planeando unos cambios a una aplicación que ya tenemos funcionando. Una de estas modificaciones resultará en que tendremos un servicio multihilo atacando a una base de datos Firebird.

El tema es que más o menos los hilos siempre escribiran a la vez a la base de datos, y va a haber muchos hilos abiertos (unos 60).

Mi pregunta: para no tener ningún tipo de problema, debo usar una conexión para cada hilo, o una conexión global?

Y otra pregunta... Para que cada hilo tenga sus propias variables locales y no sean modificadas por los otros hilos, lo mejor debe ser que las variables sean miembros de la clase, y cada hilo una instancia de esta clase, verdad? Es que estoy un poco verde en el tema Delphi multihilo...

Muchas gracias, y que paséis un buen fin de semana.

Marc

Neftali [Germán.Estévez] 09-07-2010 13:11:20

Cita:

Empezado por mcs (Mensaje 369795)
Mi pregunta: para no tener ningún tipo de problema, debo usar una conexión para cada hilo, o una conexión global?

Y otra pregunta... Para que cada hilo tenga sus propias variables locales y no sean modificadas por los otros hilos, lo mejor debe ser que las variables sean miembros de la clase, y cada hilo una instancia de esta clase, verdad? Es que estoy un poco verde en el tema Delphi multihilo...

No digo que sea lo correcto, habría que probar, pero normalmente en programación multihilo con Base de Datos, por lo que he leído, lo normal es utilizar una conexión para cada hilo.

Pregunta del Millón: ¿Qué tiene que ver todo esto con el título del mensaje? Menos mal que recomendamos que el título sea explicativo del problema... :(:(

mcs 09-07-2010 13:19:37

Cita:

Empezado por Neftali (Mensaje 369801)
Pregunta del Millón: ¿Qué tiene que ver todo esto con el título del mensaje? Menos mal que recomendamos que el título sea explicativo del problema... :(:(

Pero no lo es? Se trata de atacar/acceder a firebird a traves de varios hilos del mismo programa... :( Sinó, como lo podría poner? Es que no se me ha ocurrido nada más...

Neftali [Germán.Estévez] 09-07-2010 13:40:25

Cita:

Empezado por mcs (Mensaje 369804)
Pero no lo es? Se trata de atacar/acceder a firebird a traves de varios hilos del mismo programa... :( Sinó, como lo podría poner? Es que no se me ha ocurrido nada más...


Perdón, perdón,...
En este caso pensé que hablabas de "Varios hilos" (de los foros), "atacando" (literalmente) al FB.

Estoy fatal!!! Ni caso! :o

Casimiro Noteví 09-07-2010 13:57:02

Firebird classicserver ya es multihilo, no creo que necesites hacer nada en ese aspecto, conexiones normales.
Pero la pregunta que me surge es: por qué tienes que crear esos múltiples hilos en tu programa?

Casimiro Noteví 09-07-2010 14:01:11

Cita:

Empezado por Neftali (Mensaje 369810)
[..] Estoy fatal!!! Ni caso! :o

Amigo, cuídate del calor :)

mcs 09-07-2010 14:06:58

Cita:

Empezado por Casimiro Notevi (Mensaje 369815)
Pero la pregunta que me surge es: por qué tienes que crear esos múltiples hilos en tu programa?

Porqué estaran haciendo lecturas simultáneas a x aparatos. La escritura en la base de datos es sólo un paso de estas lecturas: primero se lee el contenido de una sonda, dependiendo de la hora se tiene que grabar... Hasta el momento se hacía todo del tiron (eran instalaciones con máximo 16 aparatos), pero ahora se tiene que ampliar a instalaciones con varias subestaciones (se habla de unas 50-60 estaciones, cada una de ellas con 3 o 4 aparatos).

Como puedes entendes, si hago estas lecturas secuenciales, hacer un bucle entero es algo MUY largo. Si lo hago paralelamente será más corto (no cómo si lo hiciera con un único aparato, pero algo es algo). Y claro, en el peor de los casos puede ocurrir que se intenten hacer desde el mismo programa 50 o 60 escrituras a la vez.

Neftali [Germán.Estévez] 09-07-2010 14:26:31

Cita:

Empezado por Casimiro Notevi (Mensaje 369815)
Firebird classicserver ya es multihilo, no creo que necesites hacer nada en ese aspecto, conexiones normales.
Pero la pregunta que me surge es: por qué tienes que crear esos múltiples hilos en tu programa?

El problema creo que no está en el SGBD, sino en los componentes de conexión de la VCL que no son "Thread-safe". Es el caso, por ejemplo, de ADO; Si vas a trabajar con Query dentro de multihilos, cada Thread debe crear su conexión.

Habría que ver exactamente qué componentes vas a utilizar y si son Thread-safe.


La franja horaria es GMT +2. Ahora son las 02:45:32.

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