MongoDB GridFS存储多种尺寸的图像或在运行时调整大小

时间:2011-09-22 14:03:35

标签: php mysql mongodb gridfs database

在我的网络应用程序中,我使用MongoDB GridFS来存储用户上传的图像。

网站的其余部分由MySQL管理。

在照片表中(在mysql中)我有三个字段用于存储文件对象的MongoId。

  • 介质

所以我存储了三个版本的图像。小,中,大。

我的问题是,有时我需要使用小于图像的“小”版本的缩略图(即在小工具框,消息头像等)或者我需要使用略小的版本媒体形象。

所以我的问题是,最好只将一个图像存储在GridFS系统中,然后在照片表中有一个存储MongoID的字段,然后创建一个动态调整图像大小的脚本(即http://localhost/image/fetch/ {mongoid}?调整= 50

否则,在我的数据库中我需要thumbnail_50,thumbnail_100,medium_300,medium_400等等。

顺利调整大小路线会有什么影响?这是一个坏或好主意?你会做什么?

感谢。

1 个答案:

答案 0 :(得分:4)

动态调整大小会导致服务器上的CPU负载大大超过一次调整为各种大小并存储结果。另一方面,提前调整大小可能会导致更大的数据集存储在GridFS中。换句话说,这是一种权衡。

您可以考虑使用混合方法,在其中您可以动态调整大小但将结果保存回GridFS,这样您就不需要将任何一个图像调整为给定大小多次。

您还应该知道HTML和CSS允许使用各种选项来控制图像的显示大小。例如:

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

将导致图像按比例缩放到50像素宽(在大多数现代浏览器中,无论如何)。您还可以使用widthmax-width CSS属性来控制图像大小。

对于我自己,并且对你将要存储的图像的音量或文件大小一无所知,我可能会在添加图像时调整大小 - 换句话说,只需一次点击页面速度和CPU负载 - 然后使用max-width来控制屏幕尺寸,如果在一个特定情况下需要稍微不同的尺寸,则使用GridFS提供各种尺寸。