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