In che modo Spatialite gestisce l'accesso simultaneo?


9

Comprendo che Spatialite è pensato per essere utilizzato da un singolo utente / macchina alla volta. Tuttavia, se i dati sono archiviati sul server, non vi è alcuna garanzia che qualcuno su un altro computer non aprirà lo stesso database e lo userà. Qualcuno ha avuto esperienza con il modo in cui QGIS e la spazialite reagiscono all'essere in un ambiente multiutente. Nella maggior parte dei casi, il livello sarebbe un livello di sola lettura. QGIS consente a più persone di leggere gli stessi shapefile, il che è una situazione simile. Cosa succede se più persone hanno sessioni di modifica simultanee aperte?


1
Di quanti utenti stiamo parlando?
Nathan W,

Vorrei chiedere di non limitare la portata della domanda in base al numero di utenti. Sarebbe utile capire la meccanica, che probabilmente non cambia con il numero di utenti.
Scro

3
Quale sistema operativo? Su quale tipo di rete? Mentre SQLite consente a più lettori ma solo un writer, il sistema operativo può imporre il proprio livello di blocco.
scruss

Uso Windows 7, Win XP è ancora comune anche negli ambienti aziendali e l'accesso avverrebbe tramite una rete locale. Ad alcune persone potrebbe piacere utilizzare anche l'archiviazione clould, ma non è possibile utilizzare qualsiasi sistema che si sincronizza o si replica. Per quanto riguarda gli utenti, immagino fino a dieci utenti in alcuni casi. Purtroppo questo è qualcosa che è difficile da testare senza un team di aiutanti, da qui la domanda. @scruss in che modo SQLite impone il blocco del database?
AndrewM,

4
In questo modo: blocco dei file e concorrenza in SQLite versione 3 . In breve, di solito puoi avere più lettori, ma quando una scrittura è immediatamente in sospeso, solo il writer ha accesso al file / intero database. Windows tende a essere un IME molto conservativo e può impedire qualsiasi accesso a un file quando un altro utente lo ha aperto per la lettura. Se QGIS attende e riprova in modo appropriato per ottenere un SQLITE_BUSY, potrebbe funzionare. Non ho modo di testarlo qui.
scruss

Risposte:


4

SQLite opera in un modello di vincite dell'ultima modifica, che porta a problemi con più peso rispetto ai blocchi di scrittura. Non esiste tracciamento della sessione di modifica nella relazione QGIS / SQLite. Quindi, anche se hai ottenuto un singolo blocco writer (SQLITE_BUSY) QGIS non riuscirà semplicemente a modificare e restituirà solo un errore, quindi invia nuovamente la modifica.

Di seguito viene descritta la gestione di questo tipo di evento e il modo in cui QGis gestisce il reinvio.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.