Spatialite如何处理并发访问?


9

我了解Spatialite旨在一次由单个用户/机器使用。但是,如果数据存储在服务器上,则不能保证另一台计算机上的某人也不会打开相同的数据库并使用它。有没有人对QGIS和spacespaceite如何在多用户环境中做出反应有任何经验。在大多数情况下,该层将是只读层。QGIS允许多个人读取相同的shapefile,这是类似的情况。如果同时打开多个编辑会话会怎样?


1
我们正在谈论多少个用户?
内森·W

我将要求不要根据用户数量来限制问题的范围。了解机制可能很有用,机制可能不会随着用户数量的变化而改变。
Scro 2013年

3
哪个操作系统?通过什么样的网络?虽然SQLite允许多个读取器,但只允许一个写入器,但是OS可以强制执行自己的锁定级别。
13年

我使用Windows 7,Win XP在企业环境中仍然很常见,并且可以通过局域网访问。某些人可能也想使用Cloud存储,但是任何同步或复制的系统都将无法使用。就用户而言,我设想在某些情况下最多有十个用户。不幸的是,如果没有团队的帮助,这是很难测试的,因此成为了问题。@scruss SQLite如何执行数据库锁定?
AndrewM

4
像这样:SQLite版本3中的文件锁定和并发。总之,您通常可以有多个读取器,但是当写入立即挂起时,只有写入器有权访问文件/整个数据库。Windows往往是非常保守的IME,并且在另一个用户打开文件进行读取时可以阻止对文件的任何访问。如果QGIS等待并适当地重试以获得SQLITE_BUSY,则可能会起作用。我没有办法在这里测试。
13年

Answers:


4

SQLite在最后一次编辑胜出模型中运行,这导致问题重于写入块。QGIS / SQLite关系中没有编辑会话跟踪。因此,即使确实得到了单个编写器块(SQLITE_BUSY),QGIS也会简单地无法编辑,仅返回错误,然后再次提交更改。

下面讨论了此类事件的处理以及QGis如何处理重新提交。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.