2012-06-20 7 views
6

私は、複数のPerlプロセスが同じSQLite3データベースを同時に読み書きするという不運な状況を抱えています。複数のPerlプロセスから同じSQLite3データベースを使用するには?

これは、2つのプロセスが同時に書き込みを行ったり、あるプロセスが同じレコードを更新しようとしているときにデータベースから読み取ったりするため、Perlプロセスがクラッシュすることがよくあります。

誰もが同じsqliteデータベースで動作するように複数のプロセスを調整する方法を知っていますか?

私はこのシステムを別のデータベースエンジンに移行することに取り組んでいますが、それを行う前に、どうにかしてそのまま動作させる必要があります。

+3

(フィックスアップ=> ...)' DBIx ::コネクタのAPI。障害発生時に再試行し、フォールトトレランス機能が強化されています。この状況では、 'txn()'関数がさらに優れているかもしれません。 – DavidO

答えて

7

SQLiteは、複数のプロセスから使用するように設計されています。 sqliteファイルをネットワークドライブにホストすると、いくつかの例外があります。あるプロセスから使用されることが予想されるようにコンパイルする方法もありますが、複数のプロセスから定期的に使用します。問題が発生した場合は、タイムアウト値を増やしてみてください。 SQLiteは、ファイルシステムのロックを使用して、同時アクセスからデータを保護します。 1つのプロセスがファイルに書き込みを行っている場合は、2つ目のプロセスが待機する必要があります。私はタイムアウトを3秒に設定し、それにはほとんど問題がありません。あなたが `実行を通して、あなたのクエリをDBIx ::コネクタオブジェクトを使用してDBへの接続、および実行することを検討するかもしれない

Here is the link to set the timeout value

+0

詳細:http://www.sqlite.org/docs.html/SQLiteテクニカル/デザインドキュメント – biziclop

関連する問題