2009-06-17 12 views
37

Ich untersuche SQLite als Speichermodul und bin gespannt, ob SQLite die Datenbankdatei bei Lesevorgängen sperrt.Sperrt SQLite die Datenbankdatei bei Lesevorgängen?

Ich bin besorgt über die Leseleistung, da mein geplantes Projekt wenig Schreibvorgänge, aber viele Lesevorgänge haben wird. Wenn die Datenbank gesperrt wird, gibt es Maßnahmen, die ergriffen werden können (z. B. Zwischenspeichern von Arbeitsspeicher), um dies zu verringern?

Antwort

42

Von seiner Wikipedia page:

Mehrere Computer-Prozesse oder Threads können die gleiche Datenbank ohne Probleme zugreifen. Mehrere Lesezugriffe können parallel erfüllt werden.

Genauer gesagt, von seinem FAQ:

Mehrere Prozesse können auf die gleiche Datenbank zur gleichen Zeit geöffnet haben. Mehrere Prozesse können gleichzeitig eine SELECT-Operation ausführen. Aber nur ein Prozess kann jederzeit Änderungen an der Datenbank vornehmen.

Ein einzelne Schreiben in die Datenbank jedoch tut die Datenbank für eine kurze Zeit sperren, damit überhaupt nichts darauf zugreifen kann (nicht einmal lesen). Details finden Sie in File Locking And Concurrency In SQLite Version 3. Grundsätzlich ist das Lesen der Datenbank kein Problem, es sei denn, jemand möchte sofort in die Datenbank schreiben. In diesem Fall wird die DB ausschließlich für die Zeit gesperrt, die für die Ausführung dieser Transaktion benötigt wird, und die Sperre wird anschließend freigegeben. Es gibt jedoch kaum Details darüber, was genau mit Leseoperationen auf der Datapase in der Zeit einer PENDING- oder EXCLUSIVE-Sperre geschieht. Meine Vermutung ist, dass sie entweder SQLITE_BUSY zurückgeben oder blockieren, bis sie lesen können. Im ersten Fall sollte es nicht zu schwierig sein, es einfach erneut zu versuchen, besonders wenn Sie nur wenige Schreibvorgänge erwarten.

38

Sie können Sperren beim Lesen vermeiden, wenn Sie den Datenbankjournalmodus auf Write-Ahead-Protokollierung setzen (siehe: http://www.sqlite.org/wal.html).

+4

Dies ist besser als die angenommene Antwort, die geschrieben wurde, bevor der WAL-Modus verfügbar war. – Stretch

Verwandte Themen