Как Spatialite обрабатывает параллельный доступ?

9

Я понимаю, что Spatialite предназначен для использования одним пользователем / машиной одновременно. Однако, если данные хранятся на сервере, нет никакой гарантии, что кто-то на другом компьютере также не откроет эту же базу данных и не использует ее. Кто-нибудь имеет опыт работы с QGIS и пространством в многопользовательской среде? В большинстве случаев слой будет слоем только для чтения. QGIS позволяет нескольким людям читать одни и те же шейп-файлы, что является аналогичной ситуацией. Что произойдет, если несколько человек одновременно откроют сеансы редактирования?

AndrewM
источник
1
Сколько пользователей мы говорим?
Натан W
Я бы попросил не ограничивать объем вопроса в зависимости от количества пользователей. Было бы полезно понять механику, которая, вероятно, не меняется в зависимости от количества пользователей.
Scro
3
Какая операционная система? По какой сети? В то время как SQLite допускает несколько считывателей, но только одного записывающего, ОС может использовать свой собственный уровень блокировки.
scruss
Я использую Windows 7, Win XP все еще распространена в корпоративных средах, и доступ будет через локальную сеть. Некоторые люди могут также захотеть использовать хранилище clould, но любая система, которая синхронизируется или реплицируется, не сможет использоваться. Что касается пользователей, я представляю до десяти пользователей в некоторых случаях. К сожалению, это трудно проверить без команды помощников, поэтому возникает вопрос. @scruss, как SQLite обеспечивает блокировку базы данных?
AndrewM
4
Например: блокировка файлов и параллелизм в SQLite версии 3 . Таким образом, обычно у вас может быть несколько считывателей, но когда запись ожидает, только писатель имеет доступ к файлу / всей базе данных. Windows имеет тенденцию быть очень консервативным IME и может запретить любой доступ к файлу, когда другой пользователь открывает его для чтения. Если QGIS ожидает и повторяет попытки при получении SQLITE_BUSY, это может сработать. У меня нет возможности проверить это здесь.
scruss

Ответы:

4

SQLite работает в модели последнего редактирования побед, что приводит к проблемам с большим весом, чем блоки записи. В отношениях QGIS / SQLite нет отслеживания сеансов редактирования. Таким образом, даже если вы получили один блок записи (SQLITE_BUSY), QGIS просто не сможет отредактировать и просто вернет ошибку, а затем передаст изменение снова.

Ниже обсуждается обработка этого типа события и как QGis обрабатывает повторную отправку.

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

Фрэнк Филлипс
источник