Bagaimana Spatialite menangani akses bersamaan?

9

Saya mengerti bahwa Spatialite dimaksudkan untuk digunakan oleh satu pengguna / mesin pada suatu waktu. Namun jika data disimpan di server, tidak ada jaminan bahwa seseorang di komputer lain juga tidak akan membuka database yang sama dan menggunakannya. Adakah yang punya pengalaman dengan bagaimana QGIS dan spatialite bereaksi berada di lingkungan multiuser. Dalam kebanyakan kasus, layer akan menjadi layer read only. QGIS memungkinkan banyak orang untuk membaca shapefile yang sama, yang merupakan situasi yang sama. Apa yang terjadi jika banyak orang membuka sesi pengeditan bersamaan?

AndrewM
sumber
1
Berapa banyak pengguna yang kita bicarakan?
Nathan W
Saya akan meminta untuk tidak membatasi ruang lingkup pertanyaan berdasarkan jumlah pengguna. Akan bermanfaat untuk memahami mekanika, yang mungkin tidak berubah dengan jumlah pengguna.
Scro
3
Sistem operasi apa? Melalui jaringan apa? Sementara SQLite memungkinkan banyak pembaca tetapi hanya satu penulis, OS dapat menegakkan tingkat pengunciannya sendiri.
scruss
Saya menggunakan Windows 7, Win XP juga masih umum di lingkungan perusahaan dan akses akan melalui Jaringan Area Lokal. Beberapa orang mungkin ingin menggunakan penyimpanan clould juga, tetapi sistem apa pun yang disinkronkan atau direplikasi tidak akan dapat digunakan. Sejauh pengguna pergi, saya membayangkan hingga sepuluh pengguna dalam beberapa kasus. Sayangnya ini adalah sesuatu yang sulit untuk diuji tanpa tim pembantu, karena itu pertanyaannya. @scruss bagaimana cara SQLite menegakkan penguncian basis data?
AndrewM
4
Seperti ini: Penguncian File Dan Konkurensi Dalam SQLite Versi 3 . Singkatnya, Anda biasanya dapat memiliki banyak pembaca, tetapi ketika sebuah tulisan segera tertunda, hanya penulis yang memiliki akses ke file / seluruh database. Windows cenderung IME sangat konservatif, dan dapat mencegah akses ke file ketika pengguna lain membukanya untuk dibaca. Jika QGIS menunggu dan mencoba lagi secara tepat untuk mendapatkan SQLITE_BUSY, ini bisa berhasil. Saya tidak punya cara untuk menguji ini di sini.
scruss

Jawaban:

4

SQLite beroperasi dalam model menang edit terakhir, yang mengarah ke masalah dengan bobot lebih dari blok tulis. Tidak ada pelacakan sesi pengeditan dalam hubungan QGIS / SQLite. Jadi, bahkan jika Anda mendapatkan blok penulis tunggal (SQLITE_BUSY) QGIS hanya akan gagal mengedit dan mengembalikan kesalahan lalu mengirimkan perubahan lagi.

Di bawah ini membahas penanganan acara semacam ini, dan bagaimana QGis menangani pengiriman ulang.

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

Frank Phillips
sumber