Хранить файлы в SQL Server или хранить их на файловом сервере? - PullRequest
8 голосов
/ 14 июля 2009

В настоящее время в папках / подпапках хранятся тысячи файлов Microsoft Word, Excel, PDF, изображений и т. Д. Они генерируются приложением на регулярной основе и могут быть доступны в любое время в этом приложении. Пока мы ищем обновление, сейчас мы рассматриваем хранение всех этих документов в SQL Server 2005. Причины этого основаны на возможности сжать документы, добавив дополнительные поля для хранения дополнительной информации об этих документах и ​​применяя индексы, где это необходимо.

Полагаю, что я хочу узнать о плюсах и минусах использования SQL Server в качестве хранилища документов вместо хранения их на файловом сервере, а также о любом опыте, который у вас может быть при этом.

Мы будем использовать C # и Windows Workflow для выполнения этой задачи.

Спасибо за ваши комментарии.

Редактировать


Насколько большие файлы?

от 100 КБ до 200 КБ (в среднем 70 КБ)

Сколько будет?

На данный момент это около 3,1 миллиона файлов (в диапазоне от Word / Excel и PDF), которые могут расти на 2600 в день. (Рост также будет увеличиваться со временем)

Сколько читает?

Этот показатель трудно определить количественно, поскольку наша старая система / приложение затрудняет его обработку.


Также еще одна полезная ссылка, указанная в аналогичном посте, описывает плюсы и минусы обоих методов.

Файлы, хранящиеся в БД и файловой системе - за и против

Ответы [ 7 ]

17 голосов
/ 14 июля 2009

практическое правило для размера документа:

size < 256 kb: store in db
265 kb < size < 1 MB: test for your load
size > 1 Mb: store on file system

РЕДАКТИРОВАТЬ: это правило также применяется к хранилищу FILESTREAM в SQL Server 2008

12 голосов
/ 14 июля 2009

Если вы полностью обновитесь до SQL Server 2008, то сможете использовать новую функцию FILESTREAM, которая позволяет документу отображаться в виде столбца в таблице, но при этом находиться в виде файла на общем ресурсе, где он иметь прямой доступ к программе (например, Word).

8 голосов
/ 14 июля 2009

Я бы и то и другое.

Я бы сохранял имена файлов с уникальным именем, что облегчало бы управление, и я бы сохранял все метаданные внутри базы данных (имя файла, тип содержимого, расположение в файловой системе, размер, описание и т. Д.) доступ к файлам осуществляется через базу данных (косвенно).

Преимущества:

  • файлы просты в обращении; Вы можете привести несколько дисков в смеси
  • база данных может хранить любое количество мета-информации, включая описание файла, по которому вы можете искать.
  • отслеживать доступ к файлам и другую статистическую информацию
  • переупорядочить файлы, используя различные парадигмы: дерево (структура каталогов), теги, поиск или контекст

Вы также можете сжать диск. Вы можете иметь RAID для резервного копирования и скорости.

1 голос
/ 14 июля 2009

Вместо того, чтобы писать пользовательскую DMS (систему управления документами), вам, вероятно, следует подумать о ее покупке или использовании WSS / SharePoint, поскольку она будет обрабатывать все обыденные детали (хранилище, индексирование, метаданные) и позволит вам создавать свои пользовательские функции. сверху.

1 голос
/ 14 июля 2009

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

1 голос
/ 14 июля 2009

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

1 голос
/ 14 июля 2009

О каких документах идет речь?

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

Недостатком является то, что может быть немного сложнее создать резервную копию документов. И сжатие также возможно с NTFS-сжатием или другими методами.

...