11 คะแนน โดย GN⁺ 2024-11-14 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • หนึ่งในความเข้าใจผิดที่ผู้คนมักมีเกี่ยวกับ SQLite คือคิดว่า “SQLite เป็นฐานข้อมูลที่อนุญาตเพียงการเชื่อมต่อเดียว” จนทำให้หลายคนเลือกที่จะไม่ใช้งาน
  • เรื่องนี้ทั้งชวนให้สับสน (คำว่า “การเชื่อมต่อ” ในที่นี้หมายถึงอะไรกันแน่?) และยังเป็นข้ออ้างที่ไม่ถูกต้องในหลายแง่มุม
  • การอ่านข้อมูล (Read Operations)
    • SQLite รองรับการอ่านพร้อมกันหลายงานได้อย่างสมบูรณ์
    • สามารถอ่านข้อมูลพร้อมกันจากหลาย “การเชื่อมต่อ” ได้ โดยไม่เกิดการชนกันหรือปัญหาใด ๆ
  • การเขียนข้อมูล (Write Operations)
    • SQLite ใช้ write lock ระดับฐานข้อมูล (DB-level write lock) ระหว่างการเขียน
    • ไม่อนุญาตให้มีการเขียนหลายงานพร้อมกัน ดังนั้นในเวลาเดียวกันจะมีเพียง “การเชื่อมต่อ” เดียวเท่านั้นที่สามารถทำงานเขียนได้
    • โดยทั่วไปแล้วสิ่งนี้ไม่ค่อยเป็นปัญหา เพราะสามารถเริ่ม IMMEDIATE TRANSACTION ได้
    • ในกรณีนี้ SQLite สามารถ retry ในคิวเพื่อให้ได้ write lock
      • (วิธีนี้ทำให้งานเขียนสามารถทำงานต่อโดยอัตโนมัติได้เมื่อ write lock ถูกปล่อย)

1 ความคิดเห็น

 
savvykang 2024-11-15

https://www.sqlite.org/lockingv3.html

5.0 การเขียนไปยังไฟล์ฐานข้อมูล
หากต้องการเขียนลงในฐานข้อมูล ก่อนอื่นโพรเซสต้องได้รับล็อก SHARED ตามที่อธิบายไว้ข้างต้น หลังจากได้รับล็อก SHARED แล้ว จะต้องได้รับล็อก RESERVED ด้วย ล็อก RESERVED เป็นการส่งสัญญาณว่าโพรเซสจะเขียนลงฐานข้อมูลในเวลาใดเวลาหนึ่งในอนาคต ในช่วงเวลาเดียวกันจะมีได้เพียงหนึ่งโพรเซสเท่านั้นที่ถือล็อก RESERVED อย่างไรก็ตาม โพรเซสอื่นยังคงสามารถอ่านฐานข้อมูลต่อไปได้ในระหว่างที่ล็อก RESERVED ยังคงถูกถืออยู่