Wie geht Spatialite mit dem gleichzeitigen Zugriff um?

9

Ich verstehe, dass Spatialite von jeweils einem Benutzer / einer Maschine verwendet werden soll. Wenn die Daten jedoch auf dem Server gespeichert sind, gibt es keine Garantie dafür, dass jemand auf einem anderen Computer nicht dieselbe Datenbank öffnet und verwendet. Hat jemand Erfahrung damit, wie QGIS und Spatialite auf eine Mehrbenutzerumgebung reagieren? In den meisten Fällen ist die Ebene eine schreibgeschützte Ebene. Mit QGIS können mehrere Personen dieselben Shapefiles lesen. Dies ist eine ähnliche Situation. Was passiert, wenn mehrere Personen gleichzeitig Bearbeitungssitzungen geöffnet haben?

AndrewM
quelle
1
Über wie viele Benutzer sprechen wir?
Nathan W
Ich würde bitten, nicht den Umfang der auf der Anzahl der Benutzer basierend Frage zu begrenzen. Es wäre nützlich, die Mechanik zu verstehen, die sich wahrscheinlich nicht mit der Anzahl der Benutzer ändert.
Scro
3
Welches Betriebssystem? Über welche Art von Netzwerk? Während SQLite mehrere Leser, aber nur einen Schreiber zulässt, erzwingt das Betriebssystem möglicherweise seine eigene Sperrstufe.
Scruss
Ich verwende Windows 7, Win XP ist auch in Unternehmensumgebungen immer noch üblich und der Zugriff erfolgt über ein lokales Netzwerk. Einige Benutzer möchten möglicherweise auch Clould-Speicher verwenden, aber jedes System, das synchronisiert oder repliziert, kann nicht verwendet werden. Was die Benutzer betrifft, stelle ich mir in einigen Fällen bis zu zehn Benutzer vor. Leider ist dies ohne ein Team von Helfern schwer zu testen, daher die Frage. @scruss Wie erzwingt SQLite das Sperren von Datenbanken?
AndrewM
4
So: Dateisperrung und Parallelität in SQLite Version 3 . Zusammenfassend kann man normalerweise mehrere Leser haben, aber wenn ein Schreibvorgang sofort ansteht, hat nur der Schreiber Zugriff auf die Datei / die gesamte Datenbank. Windows ist in der Regel ein sehr konservativer IME und kann den Zugriff auf eine Datei verhindern, wenn ein anderer Benutzer sie zum Lesen geöffnet hat. Wenn QGIS beim Abrufen eines SQLITE_BUSY wartet und es erneut versucht, könnte dies funktionieren. Ich habe hier keine Möglichkeit, dies zu testen.
Scruss

Antworten:

4

SQLite arbeitet mit einem Wins-Modell für die letzte Bearbeitung, was zu Problemen mit mehr Gewicht als Schreibblöcken führt. In der QGIS / SQLite-Beziehung gibt es keine Nachverfolgung von Bearbeitungssitzungen. Selbst wenn Sie einen einzelnen Writer-Block (SQLITE_BUSY) erhalten haben, kann QGIS einfach nicht bearbeitet werden und gibt nur einen Fehler zurück. Senden Sie die Änderung dann erneut.

Im Folgenden wird die Behandlung dieses Ereignistyps und die Behandlung der erneuten Übermittlung durch QGis erläutert.

https://github.com/qgis/QGIS/blob/a3447dd9a346f6d5e08451b7c5666a37046435bc/src/core/spatialite/headers/spatialite/sqlite3.h#L1881-L1943

Frank Phillips
quelle