Как стать автором
Обновить

Комментарии 25

для этого придумали FileStream
Сколько живу, столько зову извращенцами кадров, хранящих в базе изображения и прочие не текстовые данные.
Или я не понял ход Ваших мыслей или…

> Скорость. Пожалуй, одно из самых важных преимуществ. Дело в том, что при хранении в БД нам надо произвести следующие действия для вывода изображения: считать стрим из базы, создать временный файл, записать в него стрим. Из файловой же системы его достаточно только считать.

Зачем нам записывать данные в файл, если их надо отдать клиенту (речь ведь про веб-сервер)? Надо их считать и выдать в поток (сокет), через которых их получит клиент.

> Универсальность. Обычные изображения можно использовать для множества приложений: переслать через фтп, добавить в письмо, показать в браузере. Бинарные данные из базы необходимо сначала конвертировать.

Мы все еще говорим про веб-сервер? Он всем этим не занимается. Он только может отдавать изображения клиентам, в исходном виде или после какой-либо обработки «на лету»

> Простота реализации. Закачать файл на сервер и сохранить ссылку на него в таблицу легче, чем реализовывать логику сохранения бинарных данных в ту же таблицу. А простота — это скорость разработки и внесения изменений. Время — деньги.

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

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

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

Реально у хранения изображений в файловой системе (т.е. статически!) есть одно важное преимущество — web-сервер (программа, например nginx или apache) хорошо (быстро и эффективно) умеют работать со статическими ресурсами, выдавать их клиентам, указывать, необходимо ли обновить этот ресурс или достаточно прочитать из кэша клиента и т.п. В случае с БД этот функционал придется писать самому (или пользоваться готовыми решениями), если он нужен.
Поэтому:
— если Вы однажды помещаете изображение на сервер и дальше будете его только выдавать клиентам в неизменном виде, то лучше хранить его в файле.
— если же изображение будет обрабатываться перед выдачей, меняться в зависимости от запросов клиента и вообще вести бурную жизнь, то лучше его хранить в БД.
Я примерно то же самое и хотел сказать, что у вас в последнем параграфе.
Только насчет «бурной жизни» не совсем понятно. Вы хотите операции напрямую над бинарными данными проводить? Если нет, то разницы где хранить изображение нет.
> В случае с файлом нужно совершить два действия (записать файл и поместить ссылку на него в таблицу), в > случае с хранением в БД — только одно.

На самом деле в случае с БД тоже два. Содержимое файла как правило обычно получают из временного файла. В остальном полностью с Вами солидарен.
НЛО прилетело и опубликовало эту надпись здесь
Можно, но в базе это проще сделать.
НЛО прилетело и опубликовало эту надпись здесь
большой плюс хранения файлов в базе, когда их тысячи и размер не более 1 метра,
в остальных случаях файловая система
какой же это плюс?
а что это минус?
возрастает скорость работы с данными особенно когда их много
разбивать на каталоги это хорошо, но когда кол-во файлов, как я написал исчисляется тысячами лучше хранить в базе

Что-то ни_о_чем статья у Вас получилась. Вывод какой-то странный…

Например, что мешает шифровать файлы, и выдавать через скрипт дешифрованный стрим?

Основные проблемы хранения изображений в файлах это:
— при большом кол-ве файлов, файловая система начинает тормозить (СУБД, как правило хранят все с физически одном файле);
— целостность базы при удалении (надо заботиться об удалении файла, а не только записи в БД).

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

Ничего не мешает, только это сложнее все. Статья как раз о том, что в зависимости от целей одно или другое решение удобнее.

Объясните, пожалуйста, чем сложнее?
Мне кажется, это более трудоемкое решение, чем простая запись в базу. Я могу и заблуждаться.
НЛО прилетело и опубликовало эту надпись здесь
Как вариант хранение база + кеш в файловую систему
Для маленького проекта — плохое решение
Зато для большого — когда куча серверов и нужно масштабирование — очень даже ничего )
у хранения в базе главный плюс — это контроль за целостностью данных
Обсуждалось миллион раз. В том числе и на Хабре.
habrahabr.ru/blogs/mysql/45966/
Да, действительно. Там даже более детально разобрано. Мой топик в топку. Читаем все там :)
Зато из базы труднее проксировать в nginx
Этот документ совершенно не учитывает нюансы веб-разработки. СУБД не понимают (и не должны) протокола HTTP — а значит программисту приходится учитывать их в коде.
а зачем их шифровать?
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории