dbd database multithreading perl oracle

database - dbd - ¿Puedo usar multihebra con DBI y Oracle de Perl?



dbd:: oracle (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.

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


Bueno, la documentación de DBI dice que no se debe usar un Perl enhebrado y apunta a una publicación de Perlmonks que lo explica . 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.


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

Mientras que en teoría, siempre que cada uno use su propia conexión, debería funcionar, perl 5.8 hilos son fundamentalmente defectuosos .

Si entiendes ese artículo y aún quieres usar los hilos Perl, buena suerte.


Perl DBI impone el subprocesamiento único 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 se 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.


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


Hace un tiempo decidí trabajar en la implementación de ad-hock ... Traté la conexión w / dbi como un recurso limitado y la compartí entre los diversos hilos en Perl 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 extremo multiproceso se realizó mediante fork, en Windows utilicé lo que viniera con la implementación activeperl predeterminada (se me olvida)

Traté de que se comunicaran a través de la memoria compartida, pero terminaron usando solo un archivo compartido. 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 investigué 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 requería mucho tiempo).

Tus resultados variarán