Управление документами - PullRequest
1 голос
/ 12 января 2009

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

Ответы [ 7 ]

3 голосов
/ 12 января 2009

Храните файлы в базе данных. Тогда вы можете иметь ссылочную целостность, не добавляя сложности (MSMQ и т. Д.) В ваше приложение. Да, это увеличит размер вашей базы данных. Но файлы уже на вашем сервере, так что это одни и те же биты в другом месте.

2 голосов
/ 12 января 2009

Это своего рода система «распределенных транзакций». Возможно, вы захотите написать процедуру консолидации и запускать ее время от времени, у вас будут несоответствия в какой-то момент.

1 голос
/ 12 января 2009

Спасибо за ваши ответы. Я уже думал о том, чтобы пойти по маршруту BLOB, но не был уверен, пойдет ли на это мой начальник. Знаете, ему нравится хорошая структура каталогов? Что касается распределенных транзакций, я ничего о них не знал, но они кажутся наиболее профессиональным подходом к этому. Но я хобби, и все это кажется слишком сложным, поэтому я собираюсь выиграть раунд моего босса на фронте BLOB. Приветствия.

1 голос
/ 12 января 2009

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

Если вы хотите разрешить им удалять файлы из файлового каталога, а затем автоматически удалять записи БД, вы можете сделать много вещей, включая периодические очистки и / или службу наблюдения за каталогами файлов Windows, которая отслеживает активность каталог, а затем запускает очистки.

0 голосов
/ 12 января 2009

У меня похожая функциональность в некоторых моих приложениях.

Что я делаю, это сначала удаляю файл через точку доступа, а затем удаляю запись базы данных, которая имеет ссылку / указатель на файл. Когда пользователи запрашивают документ (что означает, что ссылка на файл все еще существует в базе данных), приложение сначала проверяет файл, и если по какой-то причине его там нет, как он и ожидал, он очищает запись базы данных в этот момент и изящно уведомляет пользователя об «ошибке».

В любом случае «осиротевшие» документы встречаются редко, но использование этого метода гарантирует, что база данных постоянно очищается как обычная часть запуска приложения.

Есть много других способов справиться с этим, но этот работает для меня.

0 голосов
/ 12 января 2009

Вы должны использовать распределенную транзакцию, которая будет включать вашу базу данных и очередь MS Messaging (MSMQ). Убедитесь, что ваша база данных может быть зарегистрирована в распределенной транзакции с помощью Координатора распределенных транзакций Microsoft (DTC).

Запрограммируйте все файловые операции с MSMQ.

Эта ссылка может помочь вам

0 голосов
/ 12 января 2009

Сначала удалите записи базы данных и время от времени проверяйте хранилище. Под ревизией хранилища я имею в виду поиск файлов, которые не имеют записи в базе данных. Если вы сначала удалите запись в БД, ваш код не будет искать документы, которых на самом деле нет.

Сколько документов и какие документы вы планируете хранить?

...