MongoDB 请教一下 ruby-china 内的图片上传是存到 mongodb 里吗?

huobazi · 2012年02月19日 · 最后由 hooopo 回复于 2012年02月28日 · 6343 次阅读

我看到有 storage :grid_fs

同时又有

# Override the directory where uploaded files will be stored. # This is a sensible default for uploaders that are meant to be mounted: def store_dir "#{model.class.to_s.underscore}" end

同时 我也有 http://www.iteye.com/problems/57595 这位哥们的困惑。

自己 顶一下

grid_fs 是 mongodb 的文件存储方案。图片是存在 mongodb 里的。 好处是那些零碎小文件被拼成了数据库大文件。备份什么的都很方便。

是在 MongoDB 的 GridFS 里面,前端有个 Nginx 做 cache

#3 楼 @huacnlee 是否可以理解当某个图片上传后 第一次访问时就在物理磁盘上生成这个文件?图片文件从 mongodb 读取显示的代码在哪个部分,我还木找到

没有代码,我是用 gridfs_controller.rb 里面,不过 Ruby China 上面跑的是我用 Sinatra 单独搞的。

@ywencn 你这个最后采用什么方式处理了?

我们是放在云存储。

#4 楼 @huobazi store_dir 只是最后生成出来图片地址的路径而已,和上传生成临时文件无关 而实际上,Carrierwave 在上传过程中是有生成临时文件的,因为这个涉及到处理图片大小。

#6 楼 @huobazi 什么意思哦。。我的项目全部是 grid_fs 存储图片

#9 楼 @ywencn 我看到 javaeye 那个问答 和我碰到的问题类似,我目前的想法是 图片单独作为 model 来存储,不 embedded_in 到其他 model 里,因为某天很有可能会有某个用户传了某个很不河蟹的图片,然后外链,然后网监打电话要求立即删除,这样就需要在管理员后台里可以做个页面直接查询和管理这些图片,我觉得 embedded_in 到其他 model 里的数据不方便单独控制。

#10 楼 @huobazi 我的项目从单用 mongodb 改成 mongodb+mysql 了。我只用 mongodb 存图片,业务数据是在 mysql 里。图片也是有 model 的。删掉记录的时候图片会跟着一起删掉。

#11 楼 @ywencn 蜗牛你终于醒悟了 图片也用 mysql 存吧:-)

#13 楼 @ywencn No... 我说一下 mysql 存图片的好处哈: 1.备份容易 2.管理统计容易 3.操作容易,比如想删除直接就 delete xx 4.事物,你懂的。

#14 楼 @hooopo 我觉得存个图这么大点事情就别事务了吧。。你说的 1、2、3 mongodb 也都可以呀

#15 楼 @ywencn 让你使用 mysql 是因为你都已经使用了 mysql,还何必再搞一个 mongodb。 增加一个 db,从概率的角度,增加了出错的几率。

我是想说用文件系统存图片除了性能一点优点也没有。 是典型的反模式。但是也不是适用所有应用场景。知道各自的优点和缺点才能做取舍。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号