Jak Spatialite obsługuje równoczesny dostęp?

9

Rozumiem, że Spatialite powinien być używany jednocześnie przez jednego użytkownika / maszynę. Jeśli jednak dane są przechowywane na serwerze, nie ma gwarancji, że ktoś na innym komputerze również nie otworzy tej samej bazy danych i nie będzie z niej korzystać. Czy ktoś ma jakiekolwiek doświadczenie z tym, jak QGIS i spatialite reagują na bycie w środowisku wielu użytkowników. W większości przypadków warstwa byłaby warstwą tylko do odczytu. QGIS pozwala wielu osobom czytać te same pliki kształtu, co jest podobną sytuacją. Co się stanie, jeśli wiele osób ma otwarte sesje edycji równoległej?

AndrewM
źródło
1
Ilu użytkowników mówimy?
Nathan W
Chciałbym nie ograniczać zakresu pytania na podstawie liczby użytkowników. Przydałoby się zrozumieć mechanikę, która prawdopodobnie nie zmienia się wraz z liczbą użytkowników.
Scro,
3
Który system operacyjny? W jakiej sieci? Podczas gdy SQLite pozwala wielu czytelnikom, ale tylko jednemu pisarzowi, system operacyjny może wymusić własny poziom blokowania.
scruss
Korzystam z systemu Windows 7, Win XP jest nadal powszechny w środowiskach korporacyjnych i dostęp byłby za pośrednictwem sieci lokalnej. Niektóre osoby mogą również chcieć korzystać z Clould Storage, ale żaden system, który się synchronizuje lub replikuje, nie będzie mógł zostać użyty. Jeśli chodzi o użytkowników, wyobrażam sobie nawet dziesięciu użytkowników. Niestety jest to coś, co trudno przetestować bez zespołu pomocników, stąd pytanie. @scruss w jaki sposób SQLite wymusza blokowanie bazy danych?
AndrewM,
4
Jak to: Blokowanie plików i współbieżność w SQLite w wersji 3 . Podsumowując, zwykle możesz mieć wielu czytników, ale gdy zapis jest natychmiast w toku, tylko pisarz ma dostęp do pliku / całej bazy danych. Windows wydaje się być bardzo konserwatywnym edytorem IME i może uniemożliwić dostęp do pliku, gdy inny użytkownik ma go do odczytu. Jeśli QGIS odpowiednio zaczeka i ponowi próbę otrzymania SQLITE_BUSY, może to zadziałać. Nie mam możliwości przetestowania tego tutaj.
scruss

Odpowiedzi:

4

SQLite działa w modelu wygranych z ostatniej edycji, co prowadzi do problemów z większą wagą niż zapisywanie bloków. W relacji QGIS / SQLite nie ma śledzenia sesji edycji. Tak więc, nawet jeśli otrzymałeś pojedynczy blok zapisujący (SQLITE_BUSY), QGIS po prostu nie edytuje i po prostu zwraca błąd, a następnie przesyła zmianę ponownie.

Poniżej omówiono obsługę tego typu zdarzeń oraz sposób, w jaki QGis obsługuje ponowne przesłanie.

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

Frank Phillips
źródło