Возможно ли заблокировать файл sqlite в файловой системе NFS?

Скажем, есть два сценария python, которые хотят записывать данные в ту же таблицу, которая хранится в SQLite файле с помощью модуля sqlite3. SQLite файл хранится в файловой системе NFS. В SQLite-FAQ я читал:

SQLite использует блокировки чтения/записи для управления доступом к базе данных. [...] Но будьте осторожны: этот механизм блокировки может работать неправильно если файл базы данных хранится в файловой системе NFS. Это потому что Блокировка файла fcntl() нарушена во многих реализациях NFS. Вам следует не удалять файлы базы данных SQLite на NFS, если несколько процессов могут попытайтесь получить доступ к файлу в одно и то же время.

Означает ли это, что это невозможно вообще или есть способ гарантировать, что один процесс ждет, пока другой не будет выполнен?

ВСТАВКИ не являются сложными. Только некоторые:

INSERT_STATEMENT = "INSERT INTO some_table (row, col, val) VALUES (?, ?, ?)"
connection.executemany(INSERT_STATEMENT, triples)

И вставленные наборы не пересекаются.

Еще один вопрос: возникают ли проблемы NFS, когда два процесса пытаются записать в ту же таблицу или когда они пытаются записать в ту же базу данных (которая является файлом)? Было бы обходным путем позволить каждому процессу создать свою собственную таблицу в одной и той же базе данных (файл) и записать на это?

Ответ 1

Не используйте SQLite с NFS. Это так просто. Семантика NFS отличается от обычных файловых систем и слабее. В конечном итоге вы получите коррупцию. Время от времени кто-то из списков рассылки SQLite-users публикует свои "обходные пути". Они никогда не работают, хотя они появляются в краткосрочной перспективе.