Независимо от того, был ли файл «удален» из БД с помощью ОБНОВЛЕНИЯ или УДАЛЕНИЯ строки, проблема одна и та же - операции базы данных + файла не являются атомарными.Ни ОБНОВЛЕНИЕ, ни УДАЛЕНИЕ не являются более безопасными, чем другие, они обе являются транзакциями в базе данных, тогда как файловая операция - нет.
Решение состоит в том, что никогда не возникает никакого конфликта в отношении состояния данных.Только один источник считается «истиной», а другой отражает эту истину.Таким образом, если когда-либо будет противоречие, вы знаете, что такое «истина».На самом деле, никогда не бывает «логической» несогласованности, только последствия, проявляющиеся физическими артефактами на диске.
В большинстве случаев база данных является лучшим представлением Истины.
Воттаблица истинности:
File Exists -- DB Record exists -- Truth
Yes No File does not exist
Yes Yes File does exist
No Yes File does exist, but its in error.
No No File does not exist
В оперативном порядке, вот как это работает.
Чтобы создать файл, скопируйте файл в конечный пункт назначения, затем сделайте запись в БД.
Если копирование файла завершится неудачно, вы не обновите БД.Если копирование файла выполнено успешно, но БД не обновлена, файл «не существует», поэтому вернитесь к первому шагу.Если копирование файла выполнено успешно, а обновление базы данных выполнено успешно, то все в порядке: A-OK
Чтобы удалить файл, сначала обновите базу данных, чтобы показать, что файл удален.Если обновление БД прошло успешно, удалите сам файл.Если обновление БД не происходит, то не удаляйте файл.Если удаление файла не удается, нет проблем - файл все еще «удаляется», потому что БД говорит об этом.
Если вы следите за рабочим процессом, «нет никакого способа», что файл должен отсутствовать, пока БДговорит, что существует.Если файл пропадает, у вас есть неопределенное состояние, которое вам нужно будет решить.Но этого не должно быть, если кто-то не заходит в вашу файловую систему.
Транзакции с БД помогают сохранять честность.
Иногда, как упоминал Джонатан, вы должны запускать какой-то процесс очистки и синхронизациичтобы убедиться, что нет никаких мошеннических файлов.но даже тогда, это действительно не проблема, за исключением файлового пространства, особенно если имена файлов реальных файлов не имеют ничего общего с исходными именами файлов.(то есть это синтетические имена файлов) Таким образом, вам не нужно беспокоиться о перезаписи и т. д.