¿Cómo maneja Spatialite el acceso concurrente?

9

Entiendo que Spatialite está destinado a ser utilizado por un solo usuario / máquina a la vez. Sin embargo, si los datos se almacenan en el servidor, no hay garantía de que alguien en otra máquina no abra la misma base de datos y la use. ¿Alguien tiene alguna experiencia sobre cómo reaccionan QGIS y spaceialite al estar en un entorno multiusuario? En la mayoría de los casos, la capa sería una capa de solo lectura. QGIS permite que varias personas lean los mismos archivos de forma, lo cual es una situación similar. ¿Qué sucede si varias personas tienen abiertas sesiones de edición concurrentes?

AndrewM
fuente
1
¿De cuántos usuarios estamos hablando?
Nathan W
Solicitaría no limitar el alcance de la pregunta en función del número de usuarios. Sería útil comprender la mecánica, que probablemente no cambie con el número de usuarios.
Scro
3
Cual sistema operativo ¿Sobre qué tipo de red? Si bien SQLite permite múltiples lectores pero solo un escritor, el sistema operativo puede imponer su propio nivel de bloqueo.
scruss
Utilizo Windows 7, Win XP también es común en entornos corporativos y el acceso sería a través de una red de área local. A algunas personas también les gustaría usar el almacenamiento clould, pero no se podría usar ningún sistema que se sincronice o se replique. En cuanto a los usuarios, imagino hasta diez usuarios en algún caso. Desafortunadamente, esto es algo difícil de probar sin un equipo de ayudantes, de ahí la pregunta. @scruss ¿cómo aplica SQLite el bloqueo de la base de datos?
AndrewM
44
De esta manera: bloqueo de archivos y concurrencia en SQLite versión 3 . En resumen, generalmente puede tener varios lectores, pero cuando una escritura está pendiente de forma inmediata, solo el escritor tiene acceso al archivo / base de datos completa. Windows tiende a ser un IME muy conservador y puede evitar el acceso a un archivo cuando otro usuario lo tiene abierto para leer. Si QGIS espera y vuelve a intentarlo adecuadamente para obtener un SQLITE_BUSY, esto podría funcionar. No tengo forma de probar esto aquí.
scruss

Respuestas:

4

SQLite opera en un último modelo de edición de victorias, lo que genera problemas con más peso que los bloques de escritura. No hay seguimiento de sesión de edición en la relación QGIS / SQLite. Entonces, incluso si obtuvo un bloque de escritor único (SQLITE_BUSY), QGIS simplemente no podrá editar y simplemente devolverá un error y luego enviará el cambio nuevamente.

A continuación se analiza el manejo de este tipo de evento y cómo QGis maneja el reenvío.

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

Frank Phillips
fuente