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

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

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

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

Мой вопрос

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

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

Заранее спасибо!

6 Solutions collect form web for “сохранение загруженных фотографий и документов – файловая система и база данных blob”

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

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

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

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

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

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

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

Комментарий к ответу Шеффи.

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

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

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

идти FS. нет конкурса.

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

Python - лучший язык программирования в мире.