Стоит ли хранить изображения в БД
![Стоит ли хранить изображения в БД](/images/articles/mysql-image.jpg)
У меня частенько спрашивают про то, где лучше хранить изображения в базе данных или в виде обычных файлов, а путь держать уже в базе данных. Конечно, 100% однозначного ответа не существует, однако, своё видение я в этой статье изложу.
На мой взгляд, преимущество хранения изображений в базе данных всего одно: отсутствие противоречий. Например, Вы создали какую-то запись в таблице, у которой есть путь к изображению. А потом это изображение случайно было удалено, в итоге, запись уже без изображения, хотя путь к нему всё равно имеется. Вот этого недостатка хранение изображений в базе данных позволяет избежать.
Теперь разберём явные минусы хранения изображений в БД:
- Изображение находится в BLOB, а это набор байтов. И чтобы этот набор байтов показать пользователю в виде изображения, придётся хорошенько попотеть с тем же header().
- Изображения - достаточно ёмкие элементы, извлечь которые задача не из лёгких для всегда ограниченной памяти сервера.
- Файловая система заточена под работу с файлами, поэтому она гораздо быстрее обработает то же изображение, чем MySQL будет его извлекать из таблицы, а Вы потом ещё будете создавать изображение из байтов.
Исходя из всего этого, мой ответ на вопрос "Стоит ли хранить изображения в БД" - не стоит. Храните в виде обычных файлов, а пути к ним сохраняйте уже в базе данных.
-
-
Михаил Русаков
Комментарии (5):
Можно написать скрипт, что если файл в папке не найден, то выводить картинку с надписью "картинки нет" или ничего не выводить... но это уже совсем другая история
Ответить
Используйте функцию file_exists(), она как раз и проверяет наличие файла.
Ответить
"...мой ответ на вопрос "Стоит ли хранить изображения в БД" - не стоит. Храните в виде обычных файлов, а пути к ним сохраняйте уже в базе данных..." - самый быстрый и четкий ответ, что я получал на свой вопрос в поисковике )). Спасибо, так делал и теперь буду делать ))
Ответить
Здравствуйте, у меня такой вопрос: А что если не хранить запись об изображении в БД (ни в каком виде) а вычислять путем кеширования мд5 id материала. И если файл есть - то выводить? Как по мне не целесообразно делать такую процедуру - выполнение скрипта занимает время. PS в компоненте K2 (для Joomla 1.5) так и реализовано - это для исключения повторения названия файла изображения при добавлении его к материалу
Ответить
джумла и работает с "такой" скоростью)
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.