热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python分布式文件系统MongoDBGridFS介绍

mongodbGridFS性能性能,网评还不错.不过在生产环境中,国外有用于存储视频流的.GridFS的一个优点是可以存储上百万的文件而无需担心扩容性.通过同步复制,可以解决分布式文件的备份问题.通过ARP-ping可以实现一个双机热备切换,类mysql的mysqlmaste
mongodb GridFS 性能
性能, 网评还不错.
不过在生产环境中,国外有用于存储视频流的.
GridFS的一个优点是可以存储上百万的文件而无需担心扩容性.
通过同步复制,可以解决分布式文件的备份问题.
通过ARP-ping可以实现一个双机热备切换,类mysqlmysql master master replic
使用Nginx module
http://github.com/mdirolf/nginx-gridfs
这是gridfs的nginx module. 可以通过nginx直接访问读取mongo gridfs中的文件.
和nginx对应的mogilefs module类似.

优点: 由于直接通过nginx,速度是最快的.
缺点: 只能通过file_path来查找,目前不支持_id来查找.因此必须在file_path上
建立索引.

其他一些信息:
1.通过runcommand可以直接在mongodb端运行处理脚本. 比如像mapreduce,或者一
些需要读取数据然后进行处理的.
这些command则是使用Javascript方式来编写的,很容易. 好处就是避免了数据在服
务端和客户端之间的读取和传输,
提高效率.
2. sharding
sharding在目前开发版中已经具备,但还不成熟. 但是可以自己实现sharding比较
好.因为目前的sharding还是比较硬性的.
3.灵活使用magic操作符和upsert,比如$inc,$all,$in 等等

#!/bin/bash

安装mongodb
#mongodb 1.2.4
official
#http://www.mongodb.org/
admin
#http://www.mongodb.org/display/DOCS/Admin+Zone
Manual
http://www.mongodb.org/display/DOCS/manual
GridFS+Tools
[url]http://www.mongodb.org/display/DOCS/GridFS+Tools [/url]
config
http://www.mongodb.org/display/DOCS/File+Based+Configuration
http://bytebucket.org/namlook/mongokit/wiki/html/gridfs.html

客户端
easy_install pymongo
API:http://api.mongodb.org/python/current/api/pymongo/
http://api.mongodb.org/python/1.4%2B/examples/gridfs.html

以下是安装脚本

mkdir mongodb
cd mongodb
wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-static-legacy-1.2.4.tgz
tar xzf mongodb-linux-x86_64-static-legacy-1.2.4.tgz
cd mongodb-linux-x86_64-static-1.2.4/
mkdir mongodb
cd mongodb
wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-static-legacy-1.2.4.tgz
tar xzf mongodb-linux-x86_64-static-legacy-1.2.4.tgz
cd mongodb-linux-x86_64-static-1.2.4/
#建立数据保存路径
mkdir data
cd data
mkdir db

启动服务

cd /home/bmc/mongodb/mongodb-linux-x86_64-static-1.2.4/bin/
./mongod --dbpath=/home/bmc/mongodb/data/db/
cd /home/bmc/mongodb/mongodb-linux-x86_64-static-1.2.4/bin/
./mongod --dbpath=/home/bmc/mongodb/data/db/
config
根据如下链接编写自己的config文件
http://www.mongodb.org/display/DOCS/File+Based+Configuration

你可以使用nginx+gridfs插件来进行访问mongodb,但是gridfs 插件需要boost,由于boost版本问题,这个东东基本安装不上或是安装很费劲,您可以使用django启动服务来代替这个复杂的插件,代码如下 :)
Views

return HttpResponse(im, mimetype="image/JPEG")
return HttpResponse(im, mimetype="image/JPEG")
后台连接代码:
#encoding=utf-8
from pymongo import Connection
from gridfs import *
from PIL import Image
import StringIO
import threading, time
#文件处理系统
class GFS:
    #定义connection and fs
    c = None
    db = None
    fs = None
    instance = None
    locker = threading.Lock()
    #初始化
    def __init__(self):
        print "__init__"
        GFS._connect()
        print "server info " + " * " * 40
        print GFS.c.server_info
    #获得单列对象
    @staticmethod
    def getInstance():
        GFS.locker.acquire()
        try:
            GFS.instance
            if not GFS.instance:
                GFS.instance = GFS()
            return GFS.instance
        finally:
            GFS.locker.release()
    #写入
    def put(self,name,image,format="png",mime="image"):
        gf = None
        data = None
        try:
            data = StringIO.StringIO()
            image.save(data,format)
            data.getvalue()
            name = "%s.%s" % (name,format)
            print "name is %s" % name
            gf = GFS.fs.open(name,"w")
            gf.content_type = "%s/%s" % (mime,format)
            gf.write(data.getvalue())
        finally:
            try:
                gf.close()
                data.close()
            finally:
                GFS.c = None
                GFS._connect()
    #获得图片
  def get(self,name):
        gf = None
        try:
            gf  = GFS.fs.open(name,"r")
            print gf
            im = gf.read()
            dic = {}
            dic["chunk_size"] =  gf.chunk_size
            dic["metadata"] = gf.metadata
            dic["mode"] = gf.mode
            dic["length"] = gf.length
            dic["upload_date"] = gf.upload_date
            dic["name"] = gf.name
            dic["content_type"] = gf.content_type
            return (im , dic)
        except Exception,e:
            print e
            return (None,None)
        finally:
                if gf:
                    if not gf.closed:
                        gf.close()
    #获得文件列表
    def list(self):
        return GFS.fs.list()
    #删除文件
    def remove(self,name):
        GFS.fs.remove(name)
    @staticmethod
    def _connect():
        if  not GFS.c:
            GFS.c = Connection("*********",27017)
            GFS.db = GFS.c['imagesdb']
            GFS.fs = GridFS(GFS.db)

推荐阅读
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文详细介绍了Python编程语言的学习路径,涵盖基础语法、常用组件、开发工具、数据库管理、Web服务开发、大数据分析、人工智能、爬虫开发及办公自动化等多个方向。通过系统化的学习计划,帮助初学者快速掌握Python的核心技能。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 本文将深入探讨PHP编程语言的基本概念,并解释PHP概念股的含义。通过详细解析,帮助读者理解PHP在Web开发和股票市场中的重要性。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 利用 Jest 和 Supertest 实现接口测试的全面指南
    本文深入探讨了如何使用 Jest 和 Supertest 进行接口测试,通过实际案例详细解析了测试环境的搭建、测试用例的编写以及异步测试的处理方法。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • 本文旨在回顾并总结近期学习的.NET Core基础知识,通过具体的操作指南加深理解,并为初学者提供实用建议,避免常见的错误和陷阱。内容涵盖CentOS的安装配置、.NET Core环境搭建及网站部署等。 ... [详细]
  • 本文详细介绍了 Kubernetes 集群管理工具 kubectl 的基本使用方法,涵盖了一系列常用的命令及其应用场景,旨在帮助初学者快速掌握 kubectl 的基本操作。 ... [详细]
author-avatar
qin2112
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有