Система управления документами - Где хранить файлы?

Я отвечаю за создание системы управления документами ASP.NET MVC. Он должен иметь возможность выполнять основные задачи управления документами, такие как добавление, редактирование и поиск записей, а также выполнять управление версиями.

В любом случае, я ориентируюсь на PDF, Office и многие форматы изображений в качестве файла, прикрепленного к каждой записи документа в базе данных. У меня вопрос: каким рекомендациям по проектированию следуют профессионалы при создании механизма хранения? Они хранят файлы документов в файловой системе? База данных? Как обрабатывается загрузка файлов?

Раньше я загружал файлы во временное место, пока пользователь редактировал данные, и перемещал их в постоянное хранилище, когда пользователь подтверждал создание записи. Это хорошо? Есть предложения по улучшению?


person Luis Aguilar    schedule 16.01.2011    source источник
comment
Используйте возможности FileStream SQL Server 2008.   -  person slugster    schedule 16.01.2011
comment
Часть вашего вопроса - вопрос о хранении файлов в базе данных задавался на этом сайте бесчисленное количество раз. Я еще не видел веских причин для этого, даже если у БД есть такая возможность. Джере — один из первых постов с информацией о еде. stackoverflow.com/questions/8952/   -  person David    schedule 16.01.2011
comment
Кстати, зачем создавать его, когда есть бесплатные с огромными сообществами пользователей и лучшей поддержкой? DotNetNuke справляется с этим в профессиональной версии (хотя она и не бесплатна). Confluence — еще одна хорошая версия, основанная на Java, но не бесплатная, и они предлагают гораздо больше, чем просто управление документами. Я за то, чтобы создавать вещи самостоятельно, но это одна из тех вещей, где отличные инструменты уже существуют, а для несвободных стоимость все еще намного меньше, чем вы бы инвестировали в ее правильное создание.   -  person David    schedule 16.01.2011


Ответы (1)


Файлы обычно должны храниться в файловой системе, а не в базе данных.

Однако вам придется учитывать некоторые другие вещи:

  • Планируете ли вы когда-либо поддерживать балансировку нагрузки, репликацию и т. д. для вашей системы?

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

  • Планируете ли вы защитить доступ к файлам?

    Если это так, вам нужно убедиться, что они не могут быть прочитаны кем-то, кто знает URL-адрес. например: возвращая файл в качестве вложения к запросу.

    Это также предотвращает выполнение файлов, предоставленных пользователями, на вашем сервере, например, когда кто-то загружает файл .aspx или .exe, а затем получает к нему доступ.

person Community    schedule 16.01.2011
comment
Насколько мне известно, их хранение в файловой системе предполагает высокую фрагментацию дисков и низкую производительность. Это правда? - person Luis Aguilar; 16.01.2011
comment
Значительная фрагментация диска должна происходить только в том случае, если у вас большой объем данных (запись-удаление-запись). Базы данных документов, как правило, имеют загруженный контент, который либо быстро удаляется (загружен по ошибке), либо остается до тех пор, пока данные не потребуются для архивации. Файлы не собирают фрагментацию волшебным образом. Если вы предоставляете своему серверу достаточно места на диске и регулярно проводите техническое обслуживание, это не должно быть проблемой. - person ; 16.01.2011
comment
Это спорно, но после работы на одной такой системе: вас увольняют ;) Поместите их в базу данных, используйте возможности SQL Server 2008 Filestream, чтобы получить дисковое пространство, управляемое базой данных, чтобы у вас была единая точка резервного копирования / восстановления, все остальное ОТСТОЙ с административной точки зрения. - person TomTom; 22.09.2011