Я недавно преобразовал формат файла рабочей области для своего приложения в sqlite. Чтобы обеспечить надежную работу в NFS, я использовал общую политику обновления, я делаю все изменения в копии, хранящейся во временной папке на локальном жестком диске. Только при сохранении я могу изменить исходный файл (возможно, в NFS), скопировав исходный файл с временным файлом. Я открываю только оригинальный файл, чтобы сохранить для него эксклюзивную блокировку, чтобы кто-то другой попытался его открыть, и его предупредят, что его использует кто-то другой.
Проблема заключается в следующем: когда я иду, чтобы сохранить свой временный файл поверх исходного файла, я должен снять блокировку оригинального файла, это дает возможность другому человеку войти и взять оригинал, хотя и небольшое окно .
Я могу придумать несколько способов обойти это:
(1) - просто выгрузить содержимое temp в orginal с помощью sql, то есть удалить таблицы на оригинале, vacumm original, выбрать из temp и вставить в orginal. Я не люблю делать sql-операции над sqlite-файлом, хранящимся в NFS. Это пугает меня проблемами коррупции. Правильно ли я так думать?
(2) Используйте различные дополнительные файлы для защиты, чтобы другие не могли проникнуть при копировании температуры поверх оригинала. Использование файлов в качестве мьютекса в лучшем случае проблематично. Мне также не нравится идея, что в случае сбоя приложения появляются дополнительные файлы.
Мне интересно, есть ли у кого-нибудь другие решения для этого. Снова скопировать временный файл поверх исходного файла, убедившись, что другое приложение не закрадывается и не захватывает исходный файл при этом?
Я использую python2.5, sqlalchemy 0.6.6 и sqlite 3.6.20
Спасибо,
Декан