- หนึ่งในความเข้าใจผิดที่ผู้คนมักมีเกี่ยวกับ SQLite คือคิดว่า “SQLite เป็นฐานข้อมูลที่อนุญาตเพียงการเชื่อมต่อเดียว” จนทำให้หลายคนเลือกที่จะไม่ใช้งาน
- เรื่องนี้ทั้งชวนให้สับสน (คำว่า “การเชื่อมต่อ” ในที่นี้หมายถึงอะไรกันแน่?) และยังเป็นข้ออ้างที่ไม่ถูกต้องในหลายแง่มุม
- การอ่านข้อมูล (Read Operations)
- SQLite รองรับการอ่านพร้อมกันหลายงานได้อย่างสมบูรณ์
- สามารถอ่านข้อมูลพร้อมกันจากหลาย “การเชื่อมต่อ” ได้ โดยไม่เกิดการชนกันหรือปัญหาใด ๆ
- การเขียนข้อมูล (Write Operations)
- SQLite ใช้ write lock ระดับฐานข้อมูล (DB-level write lock) ระหว่างการเขียน
- ไม่อนุญาตให้มีการเขียนหลายงานพร้อมกัน ดังนั้นในเวลาเดียวกันจะมีเพียง “การเชื่อมต่อ” เดียวเท่านั้นที่สามารถทำงานเขียนได้
- โดยทั่วไปแล้วสิ่งนี้ไม่ค่อยเป็นปัญหา เพราะสามารถเริ่ม
IMMEDIATE TRANSACTION ได้
- ในกรณีนี้ SQLite สามารถ retry ในคิวเพื่อให้ได้ write lock
- (วิธีนี้ทำให้งานเขียนสามารถทำงานต่อโดยอัตโนมัติได้เมื่อ write lock ถูกปล่อย)
1 ความคิดเห็น
https://www.sqlite.org/lockingv3.html
5.0 การเขียนไปยังไฟล์ฐานข้อมูล
หากต้องการเขียนลงในฐานข้อมูล ก่อนอื่นโพรเซสต้องได้รับล็อก SHARED ตามที่อธิบายไว้ข้างต้น หลังจากได้รับล็อก SHARED แล้ว จะต้องได้รับล็อก RESERVED ด้วย ล็อก RESERVED เป็นการส่งสัญญาณว่าโพรเซสจะเขียนลงฐานข้อมูลในเวลาใดเวลาหนึ่งในอนาคต ในช่วงเวลาเดียวกันจะมีได้เพียงหนึ่งโพรเซสเท่านั้นที่ถือล็อก RESERVED อย่างไรก็ตาม โพรเซสอื่นยังคงสามารถอ่านฐานข้อมูลต่อไปได้ในระหว่างที่ล็อก RESERVED ยังคงถูกถืออยู่