mongodb存储二进制数据的二种方式——binary bson或gridfs

简介:

python 版本为2.7

mongodb版本2.6.5

 

使用mongodb存储文件,可以使用两种方式,一种是像存储普通数据那样,将文件转化为二进制数据存入mongodb,另一种使用gridfs,咱们先来说说第一种

 

先读取文件内容,然后塞进bson.binary.Binary对象里,最后像平常那样写入数据库,是不是很简单呢,获取文件一样的简单,像平时那样查找数据,然后将二进制内容写入文件即可

 

#coding=utf-8
'''
Created on 2015-10-8

@author: kwsy2015
''' import pymongo import bson.binary from pymongo import MongoClient from cStringIO import StringIO def insertFile(): client = MongoClient('localhost', 27017) #获得一个database db = client.MongoFile #获得一个collection coll = db.image filename = 'F:/测试数据/hehe.jpg'.decode('utf-8') with open (filename,'rb') as myimage: content = StringIO(myimage.read()) coll.save(dict( content= bson.binary.Binary(content.getvalue()), filename = 'hehe.jpg' )) def getFile(): client = MongoClient('localhost', 27017) #获得一个database db = client.MongoFile #获得一个collection coll = db.image data = coll.find_one({'filename':'hehe.jpg'}) out = open('F:/测试数据/test4.jpg'.decode('utf-8'),'wb') out.write(data['content']) out.close() getFile()

因为我的文件路径都带有中文,因此需要用utf-8解码,否则会报错的

 

使用上述方法存储小文件是很方便的,那么如果是大文件呢,可以使用gridfs

        gridfs会把文件分成若干块来存储,每一块的大小默认为256K,所以,如果是小文件,就不要用gridfs来存储了,不然会浪费空间的,gridfs是MongoDB之上的分布式文件系统,可以使用mongodb的分片和复制机制,因为Mongodb分配数据空间时以2GB为单位,所以gridfs不产生磁盘碎片。

        

#coding=utf-8
'''
Created on 2015-9-29

@author: Administrator
''' from pymongo import MongoClient from bson.objectid import ObjectId from gridfs import * def insertFile(): client = MongoClient('localhost', 27017) db = client.Pic fs = GridFS(db, 'images') with open ('F:/测试数据/hehe.jpg'.decode('utf-8'),'rb') as myimage: data=myimage.read() id = fs.put(data,filename='first') print id def getFile(): client = MongoClient('localhost', 27017) db = client.Pic fs = GridFS(db, 'images') file = fs.get_version('first', 0) data = file.read() out = open('F:/测试数据/test3.jpg'.decode('utf-8'),'wb') out.write(data) out.close() def delFile(): client = MongoClient('localhost', 27017) db = client.Pic fs = GridFS(db, 'images') fs.delete(ObjectId('560a531b0d4eae34a4edbfdd')) def listName(): client = MongoClient('localhost', 27017) db = client.Pic fs = GridFS(db, 'images') print fs.list() listName()

写入文件时,我们可以设置它的filename,如果多个文件使用同一个filename呢,我们在获取文件时可以使用get_version()函数,第一个参数是filename,第二个参数是版本,从0开始。

 

此外,我们还可以使用get(),函数,需传入文件的ObjectId

使用python操作gridfs总得来说是很方便的,毕竟所提供的函数就那么几个,稍微用心看看源码就没问题了

 

转自:http://www.voidcn.com/blog/KWSY2008/article/p-4871553.html














本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/6513657.html,如需转载请自行联系原作者

相关文章
|
存储 NoSQL MongoDB
【赵渝强老师】MongoDB写入数据的过程
在MongoDB数据更新时,WiredTiger存储引擎通过预写日志(Journal)机制先将更新写入日志文件,再通过检查点操作将日志中的操作刷新到数据文件,确保数据持久化和一致性。检查点定期创建,缩短恢复时间,并保证异常终止后可从上一个有效检查点恢复数据。视频讲解及图示详细说明了这一过程。
316 23
【赵渝强老师】MongoDB写入数据的过程
|
11月前
|
存储 JSON NoSQL
微服务——MongoDB的数据模型
MongoDB采用文档(document)作为最小存储单位,类似关系型数据库中的行,使用BSON(Binary-JSON)格式存储数据。BSON是JSON的二进制扩展,支持内嵌文档和数组,新增了如Date、BinData等特殊数据类型,具有轻量、高效、可遍历的特点,适合非结构化与结构化数据存储。其灵活性高,但空间利用率略低。BSON数据类型包括string、integer、boolean等基本类型及date、object id等扩展类型。
293 0
|
存储 NoSQL MongoDB
【赵渝强老师】MongoDB逻辑存储结构
MongoDB的逻辑存储结构由数据库(Database)、集合(Collection)和文档(Document)组成,形成层次化数据模型。用户通过mongoshell或应用程序操作这些结构。视频讲解及结构图详见下文。
378 3
|
存储 NoSQL 关系型数据库
【赵渝强老师】MongoDB的存储结构
MongoDB 是一个可移植的 NoSQL 数据库,支持跨平台运行。其逻辑存储结构包括数据库、集合和文档,而物理存储结构则由命名空间文件、数据文件和日志文件组成。视频讲解和示意图进一步解释了这些概念。
464 5
|
存储 NoSQL MongoDB
MongoDB GridFS
10月更文挑战第24天
163 1
|
NoSQL MongoDB 数据库
使用NimoShake将数据从AWS DynamoDB迁移至阿里云MongoDB
使用NimoShake将数据从AWS DynamoDB迁移至阿里云MongoDB
|
存储 NoSQL 关系型数据库
数据的存储--MongoDB文档存储(一)
数据的存储--MongoDB文档存储(一)
683 3
|
7月前
|
NoSQL MongoDB 数据库
数据库数据恢复—MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
|
7月前
|
缓存 NoSQL Linux
在CentOS 7系统中彻底移除MongoDB数据库的步骤
以上步骤完成后,MongoDB应该会从您的CentOS 7系统中被彻底移除。在执行上述操作前,请确保已经备份好所有重要数据以防丢失。这些步骤操作需要一些基本的Linux系统管理知识,若您对某一步骤不是非常清楚,请先进行必要的学习或咨询专业人士。在执行系统级操作时,推荐在实施前创建系统快照或备份,以便在出现问题时能够恢复到原先的状态。
683 79
|
7月前
|
存储 NoSQL MongoDB
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
334 8
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉

推荐镜像

更多