2012-06-20 15 views
6

Ho una sfortunata situazione in cui più processi Perl scrivono e leggono lo stesso database SQLite3 allo stesso tempo.Come utilizzare lo stesso database SQLite3 da più processi Perl?

Ciò causa spesso il blocco dei processi di Perl mentre due processi dovrebbero scrivere nello stesso momento, oppure un processo dovrebbe essere letto dal database mentre l'altro tenta di aggiornare lo stesso record.

Qualcuno sa come è possibile coordinare più processi per lavorare con lo stesso database SQLite?

Lavorerò sullo spostamento di questo sistema su un altro motore di database, ma prima di farlo, in qualche modo devo correggerlo per funzionare così com'è.

+3

Si potrebbe considerare la connessione al DB utilizzando un oggetto DBIx :: connettore, e in esecuzione le vostre domande attraverso la conduzione '(correzione => ...)' API di DBIx :: Connector. Riprova in caso di errore e presenta una forte tolleranza ai guasti. La funzione 'txn()' potrebbe essere ancora migliore in questa situazione. – DavidO

risposta

7

SQLite è progettato per essere utilizzato da più processi. Ci sono alcune eccezioni se si ospita il file sqlite su un'unità di rete, e c'è forse un modo per compilarlo in modo tale che si aspetta di essere usato da un processo, ma lo uso regolarmente da più processi. Se riscontri problemi, prova ad aumentare il valore di timeout. SQLite utilizza i blocchi del filesystem per proteggere i dati dall'accesso simultaneo. Se un processo sta scrivendo sul file, potrebbe essere necessario attendere un secondo processo. Ho impostato i miei timeout a 3 secondi e ho pochissimi problemi con questo.

Here is the link to set the timeout value

+0

Dettagli lunghi: http://www.sqlite.org/docs.html/SQLite Documentazione tecnica/di progettazione – biziclop

Problemi correlati