2008-12-16 13 views
6

¿Alguien sabe de algún error o problema al escribir aplicaciones Perl multiproceso usando Oracle DBI? Cada hilo tendría su propia conexión con Oracle.¿Puedo usar multihebra con DBI y Oracle de Perl?

Durante mucho tiempo me dijeron que el multihilo no era compatible en Perl con Oracle.

Respuesta

5

Perl DBI impone el roscado simple a través de su interior, por lo que los controladores solo estarán activos en una sesión ($dbh) a la vez. Independientemente de la cantidad de CPU que tenga. Por lo tanto, no admite multi-threading (porque todo dentro de DBI tiene un único hilo), pero es seguro usar DBI (y por lo tanto DBD :: Oracle) en una aplicación multiproceso.

0

Sí, utilizar hilos en Perl es una idea extremadamente mala, independientemente de si usa Oracle o no.

Si bien en teoría, siempre que cada uno use su propia conexión, debería funcionar, perl 5.8 threads are fundamentally flawed.

Si comprende ese artículo y aún desea utilizar los hilos Perl, buena suerte.

2

Bueno, la documentación de DBI dice que no se debe usar un Perl enhebrado, y apunta a un Perlmonks post that explains that. La documentación que le dice que no lo haga es una buena razón.

Sin embargo, he visto que funciona bien en algunas plataformas pero falla miserablemente en otras. Ciertamente no es portátil incluso si lo haces funcionar.

1

He utilizado multi threading en Perl para la evaluación comparativa de un Oracle db y tuve que crear un controlador de base de datos para cada hilo.

0

Hace un tiempo Trabajé para conseguir una implementación de ad-hock trabajando ... Traté la conexión w/dbi como un recurso limitado y la compartí entre los diversos subprocesos usando un mecanismo de bloqueo de archivos. Mi aplicación de subprocesos múltiples solo se ha conectado al dbi a través de un script perl independiente que se ejecuta como daemon.

En Linux, el fin multiproceso se hizo a través de tenedor, en las ventanas que utilicé lo que viniera con la implementación ActivePerl por defecto (no recuerdo)

Probé con ellos se comunican a través de memoria compartida, pero terminó apenas usando un compartidas archivo en su lugar. Linux tiene un modo confiable de agregar, por lo que fue un pedazo de pastel. En Windows era mucho más difícil sincronizarlos.

Recientemente He examinado las transacciones de la base de datos, con cada instancia del hilo teniendo su propia conexión a la base de datos, y dejando que la base de datos maneje los detalles de la conexión.

Esto es con mysql, pero estoy seguro de que Oracle admite transacciones.

apache :: dbi funciona/funciona bien con mod_perl para mantener estas conexiones activas entre cada ejecución del script (antes de usar esto, cada conexión realizada llevaba bastante tiempo).

Sus resultados pueden variar.

Cuestiones relacionadas