Como o Spatialite lida com o acesso simultâneo?

9

Entendo que o Spatialite deve ser usado por um único usuário / máquina por vez. No entanto, se os dados estiverem armazenados no servidor, não há garantia de que alguém em outra máquina também não abra o mesmo banco de dados e o utilize. Alguém já teve alguma experiência com a forma como o QGIS e o spatialite reagem ao estar em um ambiente multiusuário. Na maioria dos casos, a camada seria uma camada somente leitura. O QGIS permite que várias pessoas leiam os mesmos arquivos de forma, o que é uma situação semelhante. O que acontece se várias pessoas tiverem sessões de edição simultâneas abertas?

AndrewM
fonte
11
De quantos usuários estamos falando?
Nathan W
Eu pediria para não limitar o escopo da pergunta com base no número de usuários. Seria útil entender a mecânica, que provavelmente não muda com o número de usuários.
Scro
3
Qual sistema operacional? Sobre que tipo de rede? Embora o SQLite permita vários leitores, mas apenas um gravador, o sistema operacional pode impor seu próprio nível de bloqueio.
scruss
Eu uso o Windows 7, o Win XP ainda é comum em ambientes corporativos e o acesso seria por meio de uma rede local. Algumas pessoas também podem querer usar armazenamento clould, mas qualquer sistema que sincronize ou replique não poderá ser usado. No que diz respeito aos usuários, imagino até dez usuários em alguns casos. Infelizmente, isso é algo difícil de testar sem uma equipe de ajudantes, daí a pergunta. @ scruss Como o SQLite aplica o bloqueio do banco de dados?
AndrewM
4
Assim: bloqueio de arquivo e simultaneidade no SQLite versão 3 . Em resumo, você geralmente pode ter vários leitores, mas quando uma gravação está imediatamente pendente, apenas o gravador tem acesso ao arquivo / banco de dados inteiro. O Windows tende a ser um IME muito conservador e pode impedir qualquer acesso a um arquivo quando outro usuário o abrir para leitura. Se o QGIS aguardar e tentar novamente apropriadamente a obtenção de um SQLITE_BUSY, isso poderá funcionar. Não tenho como testar isso aqui.
scruss

Respostas:

4

O SQLite opera em um modelo de última edição ganha, o que leva a problemas com mais peso do que blocos de gravação. Não há rastreamento de sessão de edição no relacionamento QGIS / SQLite. Portanto, mesmo que você tenha obtido um único bloco de gravador (SQLITE_BUSY), o QGIS simplesmente falhará na edição e retornará um erro e, em seguida, envie a alteração novamente.

A seguir, discutimos o tratamento desse tipo de evento e como o QGis lida com o reenvio.

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

Frank Phillips
fonte