Сохранение загруженных фотографий и документов - файловая система и база данных blob

Моя конкретная ситуация

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

Для фотографий будут миниатюры каждого из них.

Мой вопрос

Мой приоритет №1 - производительность. Для конечного пользователя я хочу загружать страницы и показывать изображение как можно быстрее.

Должен ли я хранить изображения внутри базы данных или файловой системы или не имеет значения? Нужно ли кэшировать что-нибудь?

Спасибо заранее!

Ответ 1

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

Похоже, ваша бизнес-модель хорошо вписывается в этот сценарий.

Ответ 2

Файловая система. Нет конкурса. При хранении данных в db данные должны пройти намного больше слоев.

Изменить при кешировании: Если вы хотите кэшировать файл, когда пользователь загружает его, чтобы гарантировать, что операция завершается как можно скорее, сброс его прямо на диск (то есть файловая система) происходит так же быстро, как и получается. Пока файлы не слишком большие, и у вас не так много одновременных пользователей, вы можете "кэшировать" файл в памяти, возвращаться к пользователю, а затем сохранять на диск. Честно говоря, я бы не стал беспокоиться.

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

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

Ответ 3

Определенно хранить изображения в файловой системе. Одно беспокойство, которое люди не считают достаточным, когда рассматривают эти типы вещей, раздувается; cramming изображения как бинарные капли в вашу базу данных - действительно быстрый способ раздуть ваш путь DB. С большой базой данных возникают более высокие требования к оборудованию, более сложные требования к репликации и резервным копиям и т.д. Приклеивание изображений в файловой системе означает, что вы можете легко или просто резервировать их/копировать их многими существующими инструментами. Объем хранилища намного проще для файловой системы, чем в базе данных.

Ответ 4

Комментарий к Sheepy.

При общем хранении файлов в SQL лучше, когда размер файла меньше 256 килобайт, и стоит, когда он превышает 1 мегабайт. Таким образом, между 256-1024 килобайтами это зависит от нескольких факторов. Прочитайте этот, чтобы узнать больше о причинах использования SQL или файловых систем.

Ответ 5

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

также хороший веб-сервер frontend (например, nginx) работает быстрее, чем любой уровень webapp, который вам нужно написать, чтобы читать blob из БД. в некоторых тестах nginx находится примерно на одном уровне с memcached для обработки необработанных данных файлов среднего размера (например, больших HTML или изображений среднего размера).

go FS. нет конкурса.

Ответ 6

Возможно, на небольшой касательной, но в это видео с конференции MySQL, ведущий рассказывает о том, как веб-сайт smugmug использует MySQL и другие технологии для повышения производительности. Я думаю, что видео основывается на некоторых ответах, размещенных здесь, но также предлагает способы улучшения производительности веб-сайта за пределами области БД.