SQLite FAQから私はそれを知っていました:
複数のプロセスが同じデータベースを同時に開くことができます。複数のプロセスが同時に実行できます
SELECT
。ただし、いつでもデータベースに変更を加えることができるプロセスは1つだけです。
だから、これまで私は私ができる理解限り:1)複数のスレッドからの読み取りデシベル(SELECT
複数のスレッド(から)2)リードデシベルSELECT
シングルスレッドから)と書き込み(CREATE
、INSERT
、DELETE
)
しかし、リーダーはライターをブロックせず、ライターはリーダーをブロックしないため、同時実行性が向上する先行書き込みロギングについて読みました。読み取りと書き込みは同時に実行できます。
最後に、指定されたとき、私はそれを見つけたときに完全に混乱しました:
SQLITE_LOCKEDエラーが発生するその他の理由は次のとおりです。
- しようとし
CREATE
たりDROP
しながら、テーブルやインデックスSELECT
の文はまだ保留されています。SELECT
同じテーブルでがアクティブなときにテーブルに書き込もうとしています。SELECT
sqliteがそのように設定されていない場合に、マルチスレッドアプリケーションで同じテーブルに対して同時に2つを実行しようとする。- DBファイルのfcntl(3、F_SETLK呼び出しが失敗します。これは、たとえばNFSロックの問題が原因である可能性があります。この問題の1つの解決策は、DBを移動してコピーし、新しいInode値を持つようにコピーすることです。
だから、私は明確にしたいのですが、ロックを回避する必要がありますか?2つの異なるスレッドから同時に読み書きできますか?ありがとう。
isolation_level=None
がありました。共有キャッシュモードがない場合、スレッド間でインスタンスを共有するにはどうすればよいですか?