2016-10-21 3 views
0

同じSQLiteデータベースに2つのPerlスクリプトが接続されていると仮定します。いずれかのスクリプトがデータベースに書き込んでいて、もう一方のスクリプトもデータベースに書き込もうとすると、2番目のスクリプト接続は切断されますか?またはその入力がいくつかのSQLiteキャッシュに格納され、SQLiteは最初のスクリプトからの書き込みが完了した後に最終的に書き込みをコミットしますか?Perlから複数のSQLiteへの書き込み

SQLIteが最初のスクリプトからの書き込みのためにデータベースをロックするだけなので、2番目のスクリプトの接続が欲しくなることはありません。両方のスクリプトがデータベースに書き込むとどうなりますか?

ありがとうございます。

答えて

1

できません。 SQLiteは同時書き込みを許可しません。プロセスは最初( ホットジャーナルが存在する場合に、おそらく、不完全な変更をロールバック)上述 として共有ロックを取得する必要があり、データベースへの書き込みを

official documentationから

。 SHAREDロックが取得された後、RESERVEDロックは に取得する必要があります。

RESERVEDロックは、プロセスは将来のある時点で データベースファイルへの書き込みが、それは現在 がちょうどファイルからの読み取りされていることを計画していることを意味しています。複数のSHAREDロックが単一の RESERVEDロックと共存できるものの、一度に1つのRESERVEDロックのみがアクティブな になることがあります。 RESERVEDは、RESERVEDロックがある間に新しいSHAREDロック を取得できるという点で、PENDINGとは異なります。

+0

アプリケーションに負荷がかかっていない場合は、単純に 'try/catch'で書き込みをラップし、何度か再試行するだけですべての問題を解決できます。 – choroba

+0

私はこのコメントが質問に向けられていると思う。いずれにせよ、私はむしろアクセスを同期させるでしょう。 – m0skit0

関連する問題