สมมติว่ามีสคริปต์หลามสองตัวที่ต้องการเขียนข้อมูลลงในตารางเดียวกันซึ่งจัดเก็บไว้ในไฟล์ SQLite โดยใช้โมดูล sqlite3
ไฟล์ SQLite ถูกเก็บไว้ในระบบไฟล์ NFS ใน SQLite-FAQ ฉันอ่านว่า:
SQLite ใช้การล็อคตัวอ่าน/ตัวเขียนเพื่อควบคุมการเข้าถึงฐานข้อมูล [...] แต่ใช้ความระมัดระวัง: กลไกการล็อคนี้อาจทำงานไม่ถูกต้องหากไฟล์ฐานข้อมูลถูกเก็บไว้ในระบบไฟล์ NFS นี่เป็นเนื่องจากการล็อกไฟล์ fcntl() ใช้งาน NFS จำนวนมากไม่ได้ คุณควรหลีกเลี่ยงการวางไฟล์ฐานข้อมูล SQLite บน NFS หากหลายกระบวนการอาจพยายามเข้าถึงไฟล์ในเวลาเดียวกัน
นี่หมายความว่าเป็นไปไม่ได้เลยหรือมีวิธีใดที่จะทำให้แน่ใจว่ากระบวนการหนึ่งรอจนกว่าอีกกระบวนการหนึ่งจะเสร็จสิ้น
INSERT นั้นไม่ซับซ้อน เพียงบางส่วน:
INSERT_STATEMENT = "INSERT INTO some_table (row, col, val) VALUES (?, ?, ?)"
connection.executemany(INSERT_STATEMENT, triples)
และเซตที่แทรกอยู่จะแยกจากกัน
คำถามเพิ่มเติม: ปัญหา NFS เกิดขึ้นเมื่อสองกระบวนการพยายามเขียนลงในตารางเดียวกันหรือเมื่อพวกเขาพยายามเขียนไปยังฐานข้อมูลเดียวกัน (ซึ่งเป็นไฟล์)? มันจะเป็นวิธีแก้ปัญหาหรือไม่ถ้าให้แต่ละกระบวนการสร้างตารางของตัวเองในฐานข้อมูล (ไฟล์) เดียวกันแล้วเขียนลงไป