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