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

StackOverflow https://stackoverflow.com/questions/8952

Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

В чем здесь вопрос?

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top