Как обрабатывать удаление файлов внутри транзакции базы данных? - PullRequest
1 голос
/ 25 июля 2011

Я хочу удалить документ, который находится в базе данных.Документ имеет несколько вложений, которые находятся в файловой системе.Бизнес-логика сначала удаляет все в базе данных, а затем удаляет файлы.Однако эта процедура часто является частью более крупной транзакции, и когда происходит откат, документ восстанавливается, но без вложений.Как решить эту проблему?

Я вижу два решения для этого:

  1. Удаление файлов в самом конце транзакции.Я думаю, что в наших рамках это не правдоподобное решение.
  2. Храните файлы в базе данных.Это бы сработало, но требует много переписывания и повторного тестирования.

Возможно, мне не хватает более простого решения.Можете ли вы поделиться своими мыслями по этому вопросу?Спасибо.

Ответы [ 3 ]

4 голосов
/ 25 июля 2011

Начиная с Vista, NTFS предлагает настоящие транзакции с поддержкой фиксации и отката. Обзор Википедии и подробностей здесь .

1 голос
/ 25 июля 2011

Если вам не хватает места на жестком диске, я бы не стал ничего удалять - ни в файловой системе, ни в базе данных;Я бы просто создал флаг статуса для записи базы данных с «удаленным» в качестве нового статуса.

Это при условии, что единственный путь к объектам в файловой системе - через приложение - если у вас есть люди, просматривающие хранилище файлов, это может не сработать.

Я очень предпочитаю управлять объектомудаление с помощью флагов состояния - оно предотвращает описанный вами сценарий, в котором вы получили распределенные транзакции, но также позволяет отслеживать историю вашего бизнес-домена, что помогает отслеживать ошибки.

0 голосов
/ 25 июля 2011

Обычная файловая система не является транзакционным ресурсом.Сохраните файлы в базе данных, чтобы получить поддержку транзакций. Пожалуйста, прочитайте ответ Хельге Кляйн.Эта функция, очевидно, наконец-то добавлена ​​в Windows.

Если вы используете SQL2008, есть функция FileStream , которая, я думаю, может позволить вам обрабатывать файлы в базе данных, но при этом обращаться к ним как к файламчерез дорогу.Возможно, это путь обновления, который не потребует переписывания всего приложения сразу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...