Aus den SQLite-FAQ habe ich Folgendes gewusst:
Bei mehreren Prozessen kann dieselbe Datenbank gleichzeitig geöffnet sein. Es können mehrere Prozesse
SELECT
gleichzeitig ausgeführt werden. Es kann jedoch zu jedem Zeitpunkt nur ein Prozess Änderungen an der Datenbank vornehmen.
Also, soweit ich das verstehe ich kann: 1) lesen db von mehreren Threads ( SELECT
) 2) lesen db von mehreren Threads ( SELECT
) und Schreiben von einzelnen Thread ( CREATE
, INSERT
, DELETE
)
Ich habe jedoch über Write-Ahead-Protokollierung gelesen , die mehr Parallelität bietet, da Leser keine Schreiber blockieren und ein Schreiber keine Leser blockiert . Lesen und Schreiben können gleichzeitig erfolgen.
Schließlich bin ich völlig durcheinander, als ich es gefunden habe , wenn angegeben:
Hier sind andere Gründe, um einen SQLITE_LOCKED-Fehler zu erhalten:
- Der Versuch,
CREATE
oderDROP
eine Tabelle oder ein Index , während eineSELECT
Erklärung noch aussteht.- Der Versuch, in eine Tabelle zu schreiben, während a
SELECT
in derselben Tabelle aktiv ist.- Versuchen Sie,
SELECT
in einer Multithread-Anwendung zwei gleichzeitig für dieselbe Tabelle auszuführen, wenn SQLite nicht dafür festgelegt ist.- fcntl (3, F_SETLK-Aufruf für DB-Datei schlägt fehl. Dies kann beispielsweise durch ein NFS-Sperrproblem verursacht werden. Eine Lösung für dieses Problem besteht darin, die DB zu entfernen und sie zurück zu kopieren, damit sie einen neuen Inode-Wert hat
Also, ich möchte für mich selbst klarstellen, ist es notwendig, die Sperre zu vermeiden? Kann ich gleichzeitig aus zwei verschiedenen Threads lesen und schreiben? Vielen Dank.
isolation_level=None
. Wie kann ich ohne den gemeinsam genutzten Cache-Modus Instanzen zwischen Threads freigeben?