プロセスAで開いたまま書き込みを行っているSQLiteデータベースがあります。プロセスBから読み取り専用で使用できるようにしたいと思います。
文書によると、
- データベースのロックが解除されている場合、データベースの読み取り(または書き込み)ができない可能性があります-不適切
- データベースが共有されている場合、2つのプロセスはデータベースを読み取ることができますが、最初のプロセスは書き込むことができません-不適切
- プロセスが書き込みを行う場合は、他のプロセスが書き込みできないことを意味するEXCLUSIVEロックが必要です-不適切
プロセスAは多くの小さな書き込みを行うため、トランザクションのコミットごとにコピーを作成するのは効率的ではないと思います。
私が見ることができる唯一の方法は、データベースがUNLOCKED状態になるまで待機し、読み取り中にSHAREDロックを取得してから、それを解放することです。その間、プロセスAは書き込みを行い、ロックが使用可能になるまでブロックされます-ロックが使用可能になった場合(プロセスBがクラッシュした場合はどうなりますか?)。これは、プロセスAとプロセスBがロックをめぐって競合することを意味します。BはSHAREDを必要とし、AはEXCLUSIVEを必要とします。これにより、処理速度が低下したり、同時実行の問題が発生したりします。
書き込みと読み取りを同時に行うという私の目的を達成する方法はありますか?