利用mongodb实现分布式WEB图片存储

转载 2016年08月30日 14:38:28
利用mongodb实现分布式WEB图片存储
2012-12-22 14:00:33
 。 的确在站比较小得时候,附件不多的时候,当然这样处理很好。但是当 附件数量海里去了~~ 那这样存就蛋疼了, 备份是个问题,硬盘IO瓶颈那会也会凸显出来。问题接踵而来。那会,就需要分布式文件存储了。    利用 GridFS 存储文件, 再利用 mongodb 的分片(sharding) 就可以做到海量存储了。 当然本文只是一个知识扩展~ 生产使用此方案出问题,与本人无关~~别找我。

  1. 等吧~~。一会就完了。完了还要配置下,做FB的 这个懂的    vi   /etc/rc.conf:
    mongod_dbpath="/data/mongodb"  # DB存储目录
      复制代码

      1. 写个上传表单:demo.php  
             上传文件: <input type="file" name="pic"/>
      2. 接受表单把上传的文件存储到 mongodb : gridfs.php
                $con = new Mongo("mongodb://192.168.1.205"); // Connect to Mongo Server
      3.         $grid->storeUpload("pic", 'demo.jpg');
      4. 。运行程序,提交表单,然后去mongo 看看 存上没。
        MongoDB shell version: 1.8.3
      5. admin   (empty)
      6. xxoo    0.0625GB  #  看到 xxoo了吧~~ 再看下刚上面的代码。在 selectDB的时候,我们选择的就是xxoo 数据库,存在了证明文件存储上了。
      7. > show collections  # 显示数据库里的集合(你就当时表吧)
      8. system.indexes
      9. fs.chunks     块集合, gridfs 会把大文件分成一小块一小块的来进行存储,所以可以存储大文件。

        > db.fs.files.find()
      10. 里面存储着我们刚上传的文件的信息,比如 filename  文件名。   length 文件大小   chunkSize 分块大小。  文件就这样给存储到 mongodb了。
        好的。到这里。 分布式文件存储,就完成了一半了~~。 这半就是文件存储。 那分布式呢? 接下来我们就分布式吧~~ 淡定~这个分布式其实还是比较简单的。
        2、mongos 路由服务器   : 192.168.1.203       把一些存储节点的路由信息存储到内存
        首先配置mongod服务器。 192.168.1.202:
        OK。确定启动成功:   ps  aux  | grep mongo     确定了木问题了继续。
        /usr/local/bin/mongos --configdb  192.168.1.202:27019   --logpath=/data/configdb/mongo.log  --port 27017 --logappend --fork
      复制代码

    1. 添加存储节点到  mongos 路由服务上:
      db.runcOMMAND({addshard:"192.168.1.205:27017"})
    复制代码


db.runCommand({"enablesharding" : "xxoo"})
好了 分布式环境搭建完了。 那我们回头看下代码方面,只需要修改下访问地址,所有的请求都应该通过  "mongos 路由服务器" 这样才能自动帮你分片嘛~~ 
        $con = new Mongo("mongodb://192.168.1.203"); // 连接到  mongos 路由服务器,让它帮我们分片
        $grid->storeUpload("pic", 'demo.jpg');
文件上传、分布式存储。都实现了。  nginx 开始上场了。 我们用 nginx 来做静态资源的服务器,前面我们装得 nginx-gridfs  模块,里面自带了访问 mongodb  的驱动。那是相当方便呀。看下 nginx 配置:
        listen       8088;
#重点在这里
            mongo 192.168.1.203:27017;
        # redirect server error pages to the static page /50x.html
                 location = /50x.html {

<li lucida="" console',="" 'courier="" new',="" serif;="" font-size:="" 12px;="" line-height:="" 1.8em;"="" style="padding: 0px 0px 0px 10px; margin: 0px 0px 0px 2em; word-wrap: break-word; list-style-type: decimal-leading-zero;">        # deny access to .htaccess files, if Apache's document root
<li lucida="" console',="" 'courier="" new',="" serif;="" font-size:="" 12px;="" line-height:="" 1.8em;"="" style="padding: 0px 0px 0px 10px; margin: 0px 0px 0px 2em; word-wrap: break-word; list-style-type: decimal-leading-zero;">        # concurs with nginx's one
            deny  all;
重点理解这些:
mongo 192.168.1.203:27017;
[php]http://192.168.1.203:8088/demo.jpg[/php]    就可以显示我们要的图片了。
#!/usr/bin/python
from sys import argv
    content = ''
        line = out.readline()
            break
if __name__ == '__main__':
<li lucida="" console',="" 'courier="" new',="" serif;="" font-size:="" 12px;="" line-height:="" 1.8em;"="" style="padding: 0px 0px 0px 10px; margin: 0px 0px 0px 2em; word-wrap: break-word; list-style-type: decimal-leading-zero;">    '''
    if len(argv) > 1:
            
            
            config_mongos = {'host':'192.168.1.202:27019','logpath':'/data/config/configdb.log','port':27017}
        elif para == 'shard':
            print runShell("/usr/local/bin/mongod --shardsvr --dbpath=%s --logpath=%s --port %d --logappend --fork" % (mongodb['dbpath'],mongodb['logpath'],mongodb['port']))
            import pymongo

                db.runCommand({'addshard':shardHOST[ip]})
            db.runCommand({'enableSharding':'test'})
    else:
<li lucida="" console',="" 'courier="" new',="" serif;="" font-size:="" 12px;="" line-height:="" 1.8em;="" background-color:="" rgb(255,="" 255,="" 255);="" color:="" rgb(51,="" 102,="" 153);="" background-position:="" initial="" initial;="" background-repeat:="" initial;"="" style="padding: 0px 0px 0px 10px; margin: 0px 0px 0px 2em; word-wrap: break-word; list-style-type: decimal-leading-zero;">        print "no argv!"
<li lucida="" console',="" 'courier="" new',="" serif;="" font-size:="" 12px;="" line-height:="" 1.8em;"="" style="padding: 0px 0px 0px 10px; margin: 0px 0px 0px 2em; word-wrap: break-word; list-style-type: decimal-leading-zero;">
复制代码
转载自:http://bbs.phpchina.com/forum.php?mod=viewthread&tid=226415

MongoDB 存储图片

MongoDB图片存储以及显示
  • feishusang
  • feishusang
  • 2016年08月20日 14:03
  • 10569

mongodb存储图片和文件实践

可能很多人会问为何要用mongodb存储图片和文件,我的理由是mongodb作存储方便稳定易扩展,我们自己写的文件存储服务器肯定很LOW,除了含有巨量图片的大型系统,一般由公司自研图片存储外,大部分情...
  • javahongxi
  • javahongxi
  • 2017年07月02日 16:43
  • 2426

mongodb存取图片文件功能

Mongodb
  • u010476464
  • u010476464
  • 2015年08月14日 10:28
  • 6617

mongoDB学习笔记——存取图片(C#)

作为一个NoSql数据库的代表,存取多媒体数据,应该是强项吧?那么,图片在mongoDB里是如何存取的呢?(其实,关系型数据库存取图片也一点问题没有,所以我看NoSql的强项不在于是否存储多媒体,而在...
  • leftfist
  • leftfist
  • 2014年02月10日 23:10
  • 10179

基于MongoDB GridFS的图片存储

商品图片,平均200-500K,说大不大,说小不小,但量大且细碎,最早通过页面上传,全部保存在文件里,且不分目录,管理和索引都很慢,几乎无法备份,读取也很慢。 改进方案由大鱼设计,图片是保存在M...
  • joeyon
  • joeyon
  • 2015年05月30日 09:06
  • 1067

基于MongoDB GridFS的图片存储

商品图片,平均200-500K,说大不大,说小不小,但量大且细碎,最早通过页面上传,全部保存在文件里,且不分目录,管理和索引都很慢,几乎无法备份,读取也很慢。 改进方案由大鱼设计,图片是保存在MyS...
  • bigtree_3721
  • bigtree_3721
  • 2016年03月27日 08:04
  • 483

基于MongoDB GridFS的图片存储

from : http://www.cnblogs.com/shanyou/archive/2012/03/10/2389103.html 它是mongodb的一个子模块,使用Gri...
  • mniwc
  • mniwc
  • 2013年02月03日 20:50
  • 4113

100亿MongoDB瓦片出图 性能测试报告

1. 测试目的 本测试报告是LINUX平台上,SuperMap iServer 9D对放于不同的MongoDB服务器上的100亿张MongoDB瓦片发布为地图服务后的出图测试,来验证MongoDB瓦...
  • supermapping
  • supermapping
  • 2017年08月15日 20:17
  • 825

Mongodb学习笔记三、使用asp.net在Mongodb中存储和读取图片文件

今天练习了如何使用c# driver存储和读取图片。 废话不多说,直接上代码。 一、存储图片(文件应该也一样): private void SaveImgBJSON(string ...
  • xue251248603
  • xue251248603
  • 2015年03月13日 17:14
  • 1391

利用JQuery上传插件Uploadify实现图片上传MongoDB并预览

架构
  • u013045437
  • u013045437
  • 2015年07月05日 19:33
  • 1831
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用mongodb实现分布式WEB图片存储
举报原因:
原因补充:

(最多只允许输入30个字)