• Publicidad

Aprovechamiento de conexiones

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

Aprovechamiento de conexiones

Notapor Moraita » 2008-11-24 04:36 @233

Hola,
soy nueva en el foro. Fui una perl(a) hace muchos años y ahora vuelvo a las andadas.
Mi duda es la siguiente:
Tengo un perl que se conecta a dos bases de datos, una Oracle y otra Essbase.
Depende de lo que lea en Oracle ejecutará en Essbase una tarea u otra (pueden llegar a ser hasta 8 tareas).

Idealmente la mejor solución que se me ocurre es:
--abrir conexiones a ambas bases de datos
--seleccionar el tipo de tareas a realizar
--ejecutar las tareas
--desconectar de bases de datos

--ejecutar las tareas ---> es aquí donde viene el problema,
se supone que cada tarea puede llevar hasta 15 minutos, por lo tanto hacerlo en secuencial me parece poco eficiente....

Yo nunca he trabajado con tareas paralelas en perl, leyendo el CPAN que tampoco conocía he visto lo del fork() y tal...
No sé, me parece que no debo usar el CPAN para una solución de un cliente que quizá no quiera nada con el CPAN donde creo haber entendido que cada uno es responsable del código que se baja...

En fin, que necesito asesoramiento para poder optar por la mejor opción, pero sobre todo que no me complique la vida a mi como programadora :),

Mis preguntas serían,
¿debo usar el fork() del CPAN si o si?
¿no tendré problemas varios usando perl con tareas en paralelo?
¿debería optar por una solución secuencial o quizá hay otra forma de implementar paralelismo en perl (sin CPAN)?

¡Ups me olvidaba!, lo he titulado "aprovechamiento de conexiones" porque todas estas preguntas vienen al intentar aprovechar las conexiones pero otra solución en caso de no utilizar las mismas conexiones podría ser:

1 Programa perl:
conecta a bd Oracle
selecciona lista de tareas
desconecta bd Oracle
inicia programas para cada tarea (hasta 8 perl)

2 programa tarea 1
conecta a bd Essbase
ejecuta comandos
desconecta de bd Essbase

3 programa tarea 2
conecta a bd Essbase
ejecuta comandos
desconecta de bd Essbase

y así... hasta 8 dependiendo de la select inicial...

¿¿¿Opinión al respecto???

Espero haberlo explicado bien,
Gracias,
Mercedes
Moraita
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2008-10-29 10:25 @475

Publicidad

Re: Aprovechamiento de conexiones

Notapor explorer » 2008-11-24 06:53 @328

Bienvenida a los foros de Perl en Español, Moraita.

Moraita escribiste:Tengo un perl que se conecta a dos bases de datos, una Oracle y otra Essbase.
Depende de lo que lea en Oracle ejecutará en Essbase una tarea u otra (pueden llegar a ser hasta 8 tareas).

Idealmente la mejor solución que se me ocurre es:
--abrir conexiones a ambas bases de datos
--seleccionar el tipo de tareas a realizar
--ejecutar las tareas
--desconectar de bases de datos

--ejecutar las tareas ---> es aquí donde viene el problema,
se supone que cada tarea puede llevar hasta 15 minutos, por lo tanto hacerlo en secuencial me parece poco eficiente....

Pero es que depende de otro factor más importante: el hardware y sistema operativo donde corre el motor de base de datos. Si, por ejemplo, el servidor de base de datos solo tiene un procesador, da igual si le mandas 8 tareas de forma simultánea: tardará lo mismo que si se lo mandas uno a uno (bueno, en realidad, tardará más, por aquello del cambio de contexto entre tareas).

Debes primero saber las limitaciones físicas y lógicas de tu servidor de base de datos. Cuántos procesadores o núcleos y cuántas peticiones simultáneas es capaz de soportar.

Si, llegado al extremo, es capaz de soportar todas las peticiones que necesitas ejecutar, una buena manera de hacer peticiones simultáneas es usando fork() o procesos independientes, claro.


Moraita escribiste:Yo nunca he trabajado con tareas paralelas en perl, leyendo el CPAN que tampoco conocía he visto lo del fork() y tal...

El fork() no es de CPAN, sino que es una primitiva del lenguaje. Y depende del sistema operativo en donde te encuentres, para que funcione bien o de forma simulada.

En CPAN, además, hay muchos módulos que ayudan y simplifican su uso. Por ejemplo los de la familia Parallel::.

Moraita escribiste:No sé, me parece que no debo usar el CPAN para una solución de un cliente que quizá no quiera nada con el CPAN donde creo haber entendido que cada uno es responsable del código que se baja...

¡Ah! Entonces también pondrán pegas cada vez que te actualices las DLL de .Net y las librerías Java...

Espero que alguien con más experiencia en Oracle te pueda dar mejores consejos...

Oracle Parallel Processing
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Bases de datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado