Возможна ли блокировка файла 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, когда два процесса пытаются записать в одну и ту же таблицу или когда они пытаются записать в одну и ту же базу данных (которая является файлом)? Было бы обходным путем позволить каждому процессу создавать свою собственную таблицу в той же базе данных (файле) и записывать в нее?


person Aufwind    schedule 28.03.2012    source источник


Ответы (1)


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

person Roger Binns    schedule 01.04.2012
comment
К сожалению, я должен использовать SQLite. В итоге я дал каждому процессу свой собственный файл для записи, а затем объединил сценарии. Но спасибо за ваш ответ! :-) - person Aufwind; 02.04.2012
comment
Когда вы в конечном итоге столкнетесь с повреждением, обязательно упомяните, что вы использовали NFS. И не удивляйтесь, когда все ответят: не делайте этого. - person Roger Binns; 03.04.2012
comment
не делать этого, даже если один процесс будет обращаться к файлу? - person ; 14.05.2014
comment
Вам понадобится идеальный код и процессы, чтобы быть абсолютно уверенным, что ни при каких обстоятельствах не будет параллельного доступа. Если вы когда-нибудь потерпите неудачу в совершенствовании, вы получите незаметную порчу, которую в конечном итоге обнаружите слишком поздно. - person Roger Binns; 14.05.2014