Как правило, насколько плохо влияет на производительность, это хранить файл в базе данных (в частности, mssql) в отличие от файловой системы? Я не могу придумать причину, не связанную с переносимостью приложения, что я хотел бы хранить мои файлы в качестве хранителей в SQL Server.
Хранение файла в базе данных в отличие от файловой системы?
Ответ 1
Посмотрите на этот ответ:
Хранение изображений в БД - Да или Нет?
По сути, пространство и производительность могут быть довольно большими, в зависимости от количества пользователей. Кроме того, имейте в виду, что веб-серверы дешевы, и вы можете легко добавить больше, чтобы сбалансировать нагрузку, тогда как база данных является самой дорогой и наиболее сложной для масштабирования частью веб-архитектуры.
Есть несколько противоположных примеров (например, Microsoft Sharepoint), но обычно хранение файлов в базе данных не является хорошей идеей.
Если вы, возможно, не пишете настольные приложения и/или не знаете, сколько пользователей вы когда-либо приобретете, но на каком-то случайном и непредсказуемом виде, таком как общедоступный веб-сайт, вы можете заплатить высокую цену за хранение файлов в базе данных.
Ответ 2
Если вы перейдете на SQL Server 2008, вы можете воспользоваться поддержкой FILESTREAM, которая дает вам лучшее из того, что есть: файлы хранятся в файловой системе, но интеграция с базой данных намного лучше, чем просто сохранение пути к файлу в поле varchar. Ваш запрос может вернуть стандартный поток файлов .NET, что упрощает интеграцию.
Ответ 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.