Як Spatialite обробляє паралельний доступ?


9

Я розумію, що Spatialite призначений для використання одним користувачем / машиною за один раз. Однак якщо дані зберігаються на сервері, немає гарантії, що хтось на іншій машині також не відкриє ту саму базу даних і нею користуватиметься. Хто-небудь має досвід щодо того, як QGIS та просторит реагують на те, що вони знаходяться в середовищі багатокористувача. У більшості випадків шар буде шаром лише для читання. QGIS дозволяє декільком людям читати одні і ті ж файли форм, що схожа ситуація. Що станеться, якщо у кількох людей відкриті одночасні сеанси редагування?


1
Про скільки користувачів ми говоримо?
Nathan W

Я б просив не обмежувати обсяг питання на основі кількості користувачів. Було б корисно зрозуміти механіку, яка, ймовірно, не змінюється в залежності від кількості користувачів.
Scro

3
Яка операційна система? Над якою мережею? Хоча SQLite дозволяє декільком читачам, але лише одному автору, ОС може застосувати власний рівень блокування.
scruss

Я використовую Windows 7, Win XP як і раніше поширений у корпоративних середовищах, і доступ був би через локальну мережу. Деякі люди можуть хотіти використовувати і сховище clould, але будь-яка система, яка синхронізує чи копіює, не зможе використовувати. Що стосується користувачів, то я думаю, що в деяких випадках до десяти користувачів. На жаль, це важко перевірити без команди помічників, звідси і питання. @scruss Як SQLite застосовує блокування бази даних?
AndrewM

4
Ось так : Блокування файлів та сумісність у версії 3 SQLite . Підсумовуючи це, зазвичай ви можете мати декілька читачів, але коли запис негайно очікує, лише автор може отримати доступ до файлу / всієї бази даних. 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.