Frage

Ich habe zwei Prozesse:

  1. Schreibt in zwei Tabellen in jeder Sekunde (ish)
  2. Liest aus den Tabellen in regelmäßigen Abständen

Ich weiß, dass mit SQLite, werden alle Schreibvorgänge, die gesamte Datenbank sperren und so manchmal der zweite Prozess kann mit einer gesperrten Datenbank fehlschlagen.

Gibt es etwas, dass vollständig die Notwendigkeit für diese beiden Prozesse entfernen würde vorschlagen, können die gleiche Datenbank zu berühren? Zum Beispiel könnte ich atomar übertragen Sie die Daten aus der Datenbank zu einer zweiten Nur-Lese-Datenbank geschrieben werden?

Danke:)

War es hilfreich?

Lösung

Sie können die Verbindung mit der Datenbank in dem zweiten Prozess konfigurieren für eine gewisse Zeit zu warten, wenn es eine geschäftige Datenbank trifft, in regelmäßigen Abständen für eine freie Datenbank zu überprüfen Aufwachen, bevor er aufgibt.

sqlite3_busy_timeout(sqlite3*, int ms);

http://www.sqlite.org/c3ref/busy_timeout.html

Andere Tipps

Ich schlage vor, das Lesen der FAQ auf SQLite Thread-Sicherheit ?

  

Themen sind böse . Vermeiden Sie sie.

     

SQLite ist THREAD. Wir machen diese Konzession, da viele Nutzer wählen die Beratung im vorherigen Absatz angegeben zu ignorieren. Aber um Thread-sicher zu sein, SQLite muss mit der SQLITE_THREADSAFE Präprozessormakro auf 1 gesetzt kompiliert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top