Comment Spatialite gère-t-il l'accès simultané?

9

Je comprends que Spatialite est destiné à être utilisé par un seul utilisateur / machine à la fois. Cependant, si les données sont stockées sur le serveur, rien ne garantit que quelqu'un sur une autre machine n'ouvrira pas également la même base de données et ne l'utilisera pas. Quelqu'un a-t-il une expérience de la façon dont QGIS et spatialite réagissent dans un environnement multi-utilisateur. Dans la plupart des cas, la couche est une couche en lecture seule. QGIS permet à plusieurs personnes de lire les mêmes fichiers de formes, ce qui est une situation similaire. Que se passe-t-il si plusieurs personnes ont des sessions d'édition simultanées ouvertes?

AndrewM
la source
1
De combien d'utilisateurs parlons-nous?
Nathan W
Je demanderais de ne pas limiter la portée de la question en fonction du nombre d'utilisateurs. Il serait utile de comprendre les mécanismes, qui ne changent probablement pas avec le nombre d'utilisateurs.
Scro
3
Quel système d'exploitation? Sur quel type de réseau? Alors que SQLite autorise plusieurs lecteurs mais un seul écrivain, le système d'exploitation peut appliquer son propre niveau de verrouillage.
scruss
J'utilise Windows 7, Win XP est toujours aussi courant dans les environnements d'entreprise et l'accès se ferait via un réseau local. Certaines personnes pourraient également utiliser le stockage en bloc, mais tout système qui se synchronise ou se réplique ne pourrait pas être utilisé. En ce qui concerne les utilisateurs, j'imagine jusqu'à dix utilisateurs dans certains cas. Malheureusement, c'est quelque chose qui est difficile à tester sans une équipe d'aides, d'où la question. @scruss comment SQLite applique-t-il le verrouillage de la base de données?
AndrewM
4
Comme ceci: verrouillage de fichiers et accès simultané dans SQLite version 3 . En résumé, vous pouvez généralement avoir plusieurs lecteurs, mais lorsqu'une écriture est immédiatement en attente, seul le rédacteur a accès au fichier / à la base de données entière. Windows a tendance à être un IME très conservateur et peut empêcher tout accès à un fichier lorsqu'un autre utilisateur l'ouvre pour la lecture. Si QGIS attend et réessaye correctement d'obtenir un SQLITE_BUSY, cela pourrait fonctionner. Je n'ai aucun moyen de tester cela ici.
scruss

Réponses:

4

SQLite fonctionne dans un dernier modèle de victoires d'édition, ce qui entraîne des problèmes avec plus de poids que les blocs d'écriture. Il n'y a pas de suivi de session d'édition dans la relation QGIS / SQLite. Donc, même si vous avez obtenu un seul bloc d'écriture (SQLITE_BUSY), QGIS échouera simplement à modifier et renverra simplement une erreur, puis soumettra à nouveau la modification.

Ce qui suit décrit la gestion de ce type d'événement et la manière dont QGis gère la nouvelle soumission.

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

Frank Phillips
la source