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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
83
0
128 353
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

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

Ответ принят как подходящий

Взгляните на этот ответ:

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

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

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

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

В чем вопрос?

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

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

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

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

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

Я нигде не упоминаю, что этот «файл» нужно записать на диск и прочитать заново.

Dave Van den Eynde 28.09.2009 11:35

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

Jon Limjap 28.09.2009 11:50

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

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

У меня здесь некоторые оговорки. В частности, аспекты масштабируемости и доступности: как вы контролируете, где хранятся эти «капли»?

Dave Van den Eynde 28.09.2009 11:37

Масштабируемость и доступность, кажется, были хорошо продуманы - см. Этот технический документ: msdn.microsoft.com/en-us/library/cc949109.aspx

Jon Galloway 28.09.2009 18:31

Одно предостережение заключается в том, что при подключении к базе данных вы должны использовать встроенную безопасность (например, аутентификацию Windows): blogs.msdn.com/b/psssql/archive/2008/04/10/…

Sven Grosen 31.08.2013 00:48

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

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

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

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

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

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

Что вы считаете большим или маленьким файлом?

ubiquibacon 13.08.2016 22:33

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