Spatialite จัดการการเข้าถึงพร้อมกันอย่างไร


9

ฉันเข้าใจว่า Spatialite นั้นมีไว้สำหรับผู้ใช้ / เครื่องจักรครั้งละหนึ่งคน อย่างไรก็ตามหากข้อมูลถูกเก็บไว้บนเซิร์ฟเวอร์ไม่มีการรับประกันว่าใครบางคนในเครื่องอื่นจะไม่เปิดฐานข้อมูลเดียวกันและใช้งาน มีใครบ้างที่เคยมีประสบการณ์เกี่ยวกับวิธีการที่ QGIS และ spatialite ตอบสนองต่อการอยู่ในสภาพแวดล้อมที่มีผู้ใช้หลายคน ในกรณีส่วนใหญ่เลเยอร์จะเป็นเลเยอร์แบบอ่านอย่างเดียว QGIS อนุญาตให้หลายคนอ่านไฟล์รูปร่างเดียวกันซึ่งเป็นสถานการณ์ที่คล้ายกัน จะเกิดอะไรขึ้นถ้ามีหลายคนที่เปิดเซสชันแก้ไขพร้อมกัน


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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.