Хранение данных изображения в базе данных MySQL?
Я реализую проект, который обрабатывает значительное количество изображений.
По вашему мнению, какие плюсы и минусы имеют следующие два подхода:
- Мне нужно хранить тысячи элементов, каждый элемент - как несколько свойств строки и изображения.
- Каждый элемент как идентификатор (целое число)
- Таблицы MyISAM
- Как сохранить изображения:
- подход 1: хранить изображения в каталоге и каждое изображение с именем ID.jpg
- подход 2: сохранение изображений в базе данных как двоичный BLOB
Использование подхода 1 Я могу получить доступ к изображению напрямую и что он
<img src="same_directory/10.jpg" />
Используя подход 2, я все еще могу использовать вышеуказанный HTML, но мне нужно перенаправить этот jpg-доступ к PHP script, который вернет реальное изображение из БД.
С точки зрения производительности, который, по вашему мнению, быстрее?
Я стремлюсь приблизиться к 1.
Ответы
Ответ 1
преимущества подхода 1:
- Получение веб-сервера с плоской файловой формой происходит быстрее.
- большинство веб-хостов, вероятно, будут следовать этому подходу.
- файловая система работает быстрее для хранения файлов.
преимущества подхода 2:
- Все ваши данные хранятся в одном месте, если вы переносите свои
сайт/база данных, изображения будут только там
- Легче сортировать/удалять/etc...
- Поскольку вы должны обслуживать его через PHP скрипт, вы можете выполнить
дополнительные вещи, такие как безопасность, если требуется, или обработка изображений
(очевидно, вы можете сделать это и с плоским файлом, но вы должны сделать
убедитесь, что безопасность не может быть обойдена, оставив изображения в общедоступной
каталог).
рассмотрение подхода к эффективности 1 лучше всего продолжить.
Ответ 2
Хранение файловой системы происходит быстрее.
Ответ 3
У меня возникнет соблазн использовать первый подход, так как нет реальной ценности в загромождении базы данных с данными изображения. (Получение данных из базы данных также будет значительно медленнее, чем просто загрузить его с диска.)
Однако в качестве предположения вы можете не захотеть сохранить полный путь на диске к изображению в таблице базы данных, чтобы в будущем обеспечить переносимость. (т.е. просто сохраните часть пути и имя файла из "известной" базовой папки.)
Ответ 4
Храните файлы изображений в виде файлов изображений на сервере, чтобы снизить нагрузку на БД и позволить серверу обрабатывать кеширование и т.д.
В целом, это действительно зависит от того, какие изображения мы говорим. Маленькие миниатюры (например, для значков файлов) не будут такими уж плохими, но я не буду хранить целые изображения в БД. В общем, я думаю, что подход файловой системы был бы быстрее.
Ответ 5
Позволяет исследовать проблему в веб-браузере.
Когда вы загружаете страницу с 10 снимками, сохраненными в базе данных. Ваш браузер отправляет новый HTTP-запрос на сервер. Каждое соединение с запросом init DB и сторона сервера script. Или просто прочитайте статическое изображение из файловой системы.
что будет быстрее?
Другая часть - получение данных из файловой системы или базы данных. Если мы не используем кеш для базы данных (но для 10 ГБ изображений у вас должно быть 10 ГБ ОЗУ для кэширования этих данных). База данных и HTTP-сервер в любом случае считывают данные из файловой системы. Но я думаю, что HTTP-браузер читает данные быстрее, чем сервер базы данных.
Только одна вещь для хранилища базы данных - очень простая миграция данных с одного сервера на другой. Но это не важно для производительности системы.
И не забудьте сделать путь для изображений, таких как /a/b/c/abc.jpg - он будет быстрее для большого количества изображений, а затем поместить все изображения в один каталог.