2012-06-20 7 views
6

Tengo una situación desafortunada en la que varios procesos de Perl escriben y leen la misma base de datos SQLite3 al mismo tiempo.¿Cómo usar la misma base de datos SQLite3 de múltiples procesos Perl?

Esto a menudo hace que los procesos de Perl se bloqueen ya que dos procesos estarían escribiendo al mismo tiempo, o un proceso estaría leyendo desde la base de datos mientras que el otro intenta actualizar el mismo registro.

¿Alguien sabe cómo podría coordinar los múltiples procesos para trabajar con la misma base de datos sqlite?

Voy a trabajar en mover este sistema a un motor de base de datos diferente pero antes de hacerlo, de alguna manera tengo que arreglarlo para que funcione como está.

+3

Usted podría considerar la conexión a la base de datos utilizando un objeto DBIx :: conector, y la publicación de sus consultas a través de la 'ejecutar (corrección => ...)' API de DBIx :: conector. Reintenta en caso de falla y tiene una gran tolerancia a fallas. La función 'txn()' puede ser incluso mejor en esta situación. – DavidO

Respuesta

7

SQLite está diseñado para ser utilizado en múltiples procesos. Hay algunas excepciones si aloja el archivo sqlite en una unidad de red, y tal vez haya una forma de compilarlo de tal manera que espere ser usado desde un proceso, pero lo uso de múltiples procesos regularmente. Si tiene problemas, intente aumentar el valor de tiempo de espera. SQLite usa los bloqueos del sistema de archivos para proteger los datos del acceso simultáneo. Si un proceso está escribiendo en el archivo, un segundo proceso podría tener que esperar. Configuré mis tiempos de espera en 3 segundos y tengo muy pocos problemas con eso.

Here is the link to set the timeout value

+0

Larga información: http://www.sqlite.org/docs.html/SQLite Technical/Design Documentation – biziclop

Cuestiones relacionadas