11 December 2008

Где хранить изображения

Website development
Намедни задумался над вопросом хранения изображений. Альтернативы две: в файловой системе и в базе данных. Это я, кстати, про изображения для веб-проектов.

Почитал литературу. Как оказалось, но не было особо удивительным, у хранения файлов как файлов есть ряд преимуществ:
  • Скорость. Пожалуй, одно из самых важных преимуществ. Дело в том, что при хранении в БД нам надо произвести следующие действия для вывода изображения: считать стрим из базы, создать временный файл, записать в него стрим. Из файловой же системы его достаточно только считать.
  • Универсальность. Обычные изображения можно использовать для множества приложений: переслать через фтп, добавить в письмо, показать в браузере. Бинарные данные из базы необходимо сначала конвертировать.
  • Простота реализации. Закачать файл на сервер и сохранить ссылку на него в таблицу легче, чем реализовывать логику сохранения бинарных данных в ту же таблицу. А простота — это скорость разработки и внесения изменений. Время — деньги.
  • И если база вдруг накроется (представим, что бэкапов не было), то хотя бы изображения не потеряются.

У хранения файлов в базе данных есть один несомненный плюс — шифрование. Но часто ли необходимы такие меры предосторожности для изображений? И довольно сложно синхронизировать файловую систему с базой: удалил запись, надо удалить и файл. В базе это же решается в один ход каскадным удалением соответствующей записи с BLOB'ом.

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

Вердикт такой. Нельзя сказать, что какой-то из подходов более правильный, т.к. правильность определяется задачей. Более простым является стандартный способ хранения изображений как файлов. Но для некоторых задач более подходят базы данных.
Tags:imagesбазы данныхизображения
Hubs: Website development
-8
37.2k 8
Comments 25