MongoDB GridFS хранит изображения различных размеров или использует для изменения размера на лету - PullRequest
2 голосов
/ 22 сентября 2011

В моем веб-приложении я использую MongoDB GridFS для хранения загруженных пользователем изображений.

Остальной сайт управляется MySQL.

В таблице фотографий (в mysql) у меня есть три поля для хранения MongoId файлового объекта.

  • маленький
  • средний
  • большой

Итак, я храню три версии изображения. Малый, средний и большой.

У меня вопрос, иногда мне нужно использовать уменьшенное изображение, которое меньше, чем «маленькая» версия изображения (например, в окне виджета, аватарах сообщений и т. Д.), Или мне нужно будет использовать немного меньшую версию среднее изображение.

Так что мой вопрос, лучше ли просто сохранить одно изображение в системе GridFS, а затем иметь одно поле в таблице фотографий, хранящее MongoID, а затем создать скрипт, который изменяет размер изображения на лету (т.е. http://localhost/image/fetch/{mongoid}?resize=50

В противном случае, в моей БД мне понадобятся thumbnail_50, thumbnail_100, medium_300, medium_400 и т. Д. И т. Д.

Каковы будут последствия перехода по маршруту изменения размеров на лету? плохая или хорошая идея? Что бы вы сделали?

Спасибо.

1 Ответ

4 голосов
/ 22 сентября 2011

Изменение размера на лету приведет к гораздо большей загрузке ЦП на вашем сервере, чем изменение размера к разным разам за один раз, и сохранение результатов. С другой стороны, изменение размера заранее может привести к тому, что в GridFS будет храниться больший набор данных. Другими словами, это компромисс.

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

Вы также должны знать, что HTML и CSS позволяют использовать различные параметры для управления отображаемым размером изображения. Например:

<img src="/path/to/image.jpg" width="50"/>

В результате изображение масштабируется пропорционально ширине 50 пикселей (во всяком случае, в большинстве современных браузеров). Вы также можете использовать CSS-свойства width и max-width для управления размером изображения.

Для себя, не зная об объеме или размере файлов изображений, которые вы будете хранить, я, вероятно, изменил бы размер при добавлении изображений - другими словами, пострадали бы скорость страницы и загрузка ЦП один раз - а затем обслуживать различные размеры из GridFS, используя max-width для управления размером на экране, если в одном конкретном случае требуется немного другой размер.

...