Подтвердить что ты не робот

Хранение файла в базе данных в отличие от файловой системы?

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

4b9b3361

Ответ 1

Посмотрите на этот ответ:

Хранение изображений в БД - Да или Нет?

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

Есть несколько противоположных примеров (например, Microsoft Sharepoint), но обычно хранение файлов в базе данных не является хорошей идеей.

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

Ответ 2

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

Начало работы с хранилищем FILESTREAM

Ответ 3

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

Ответ 4

Какой вопрос здесь?

Современная СУБД SQL2008 имеет множество способов работы с BLOB, которые не просто прилипают к ним в таблице. Конечно, есть плюсы и минусы, и вам, возможно, придется подумать об этом немного глубже.

Это интересная статья, покойный (?) Джим Грей

В BLOB или не в BLOB: большое хранилище объектов в базе данных или файловой системе

Ответ 5

В моем собственном опыте всегда лучше хранить файлы в виде файлов. Причина в том, что файловая система оптимизирована для хранения файлов, тогда как в базе данных нет. Конечно, есть некоторые исключения (например, предполагается, что многословная файловая система MS нового поколения будет построена поверх SQL-сервера), но в целом это мое правило.

Ответ 6

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

Производительность в стороне, это также зависит от того, насколько плотно связаны данные. Если файл содержит данные, которые тесно связаны с полями базы данных, то он концептуально принадлежит к нему и может храниться в блобе. Если он содержит информацию, которая потенциально может относиться к нескольким записям или может быть использована вне контекста базы данных, то она принадлежит вне. Например, изображение на веб-странице выбирается по отдельному запросу со страницы, которая ссылается на него, поэтому она может принадлежать вне (в зависимости от конкретного дизайна и соображений безопасности).

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

Ответ 7

Мы приняли решение хранить как varbinary для http://www.freshlogicstudios.com/Products/Folders/ на полпути, ожидая проблем с производительностью. Я могу сказать, что мы были приятно удивлены, насколько хорошо это получилось.

Ответ 8

Я согласен с @ZombieSheep. Еще одна вещь - я вообще не думаю, что базы данных действительно должны быть переносимыми, потому что вы пропускаете все функции, предоставляемые поставщиком СУБД. Я думаю, что переход на другую базу данных будет последним, что можно было бы рассмотреть. Просто мои $.02

Ответ 9

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

Ответ 10

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