Возможна ли блокировка файла sqlite в файловой системе NFS? - PullRequest
12 голосов
/ 28 марта 2012

Допустим, есть два сценария 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 Ответ

21 голосов
/ 01 апреля 2012

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

...