Хранение файлов на файловом сервере или в базе данных? - PullRequest
0 голосов
/ 17 августа 2011

Я разрабатываю какое-то веб-приложение в ASP.Net, которое в основном предназначено для хранения, совместного использования и обработки документов и документов в формате MS Word, но я не уверен, как управлять этими документами, я думал о хранении документов в папках и только сохраняя метаданные из них в БД ИЛИ сохраняя все документы в БД, я использую SQL Server 2008. Каково ваше предложение?

Ответы [ 6 ]

3 голосов
/ 17 августа 2011

В базе данных, если вы не заботитесь о целостности данных.

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

FILESTREAM в SQL Server 2008 делает его эффективным в настоящее время (и другие СУБД имеют такие функции, какэто тоже)

3 голосов
/ 17 августа 2011

SQL Server 2008 достаточно хорош для хранения и обслуживания больших документов (в отличие от некоторых более ранних версий), поэтому, безусловно, это вариант.Тем не менее, иметь большие капли, обслуживаемые из БД, как правило, не очень хорошая идея.Я думаю, вам нужно подумать о преимуществах и недостатках обоих подходов.Несколько общих вещей, о которых стоит подумать:

  • Насколько большими будут файлы и сколько их будет?Гораздо проще масштабировать файловую систему после многих ТБ, чем делать то же самое для БД.
  • Как вы хотите управлять резервными копиями?Очевидно, что при подходе к файловой системе вам нужно будет создавать резервные копии файлов отдельно от БД.

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

0 голосов
/ 17 августа 2011

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

Основным преимуществом подхода к базе данных являются обычные свойства ACID - метаданные всегда будут соответствовать документу,что не будет иметь место, если вы используете файловую систему для хранения документов.Используя файловую систему, ваши метаданные и документы будут относительно легко синхронизироваться: документы в файловой системе, для которых нет метаданных, метаданные, в которых документ пропал или поврежден.Если вам нужна какая-либо надёжность в вашем хранилище документов, тогда база данных - намного лучший подход, чем использование файловой системы.

0 голосов
/ 17 августа 2011

Если вы собираетесь только работать с этими файлами, я бы подумал сохранить их в i DB как BLOB данные. В случае, если у вас есть файлы в папках и только имена в БД, вам следует позаботиться о том, чтобы, например:

1) однажды вам может понадобиться переименовать файл

2) изменить свое местоположение

3) изменить его расширение

или что угодно.

В случае DB вместо этого вы можете сохранить в отдельной таблице BLOB данные, в другой таблице имя и расширение файла вместе с его ID на BLOB столе. В этом случае в момент ранее рассмотренного сценария вам нужно будет просто выполнить простой SQL запрос на обновление.

0 голосов
/ 17 августа 2011

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

0 голосов
/ 17 августа 2011

Если вы храните эти файлы в одной папке, то сохраняйте имена файлов в БД. Поскольку ни один каталог не может иметь 2 одинаковых имен файлов с одинаковым расширением. Если вы хотите сохранить файл в БД, вам, возможно, придется использовать BLOB или байтовый массив для хранения.

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

...