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