您的位置:首页 > 数据库 > Mongodb

MongoDB的学习笔记(四)--MongoDB中的GridFS

2017-10-23 08:33 267 查看
GridFS是一种将大型文件存储在MongoDB的文件规范:

MongoDB数据库以支持BSON格式保存二进制对象,但是MongoDB中的BSON对象最大不能超过4MB。

GridFs规范提供了一种透明的机制,可以将一个大文件分割成多个较小的文档。为实现这点,该规范指定了一个将文件分块的标准。每个文件都将在文件集合对象中保存一个元数据对象,一个或多个块对象可被组合保存在一个块集合中。

GridFS文件存储原理:

驱动首先会在当前数据库创建两个集合:fs.files和fs.chunks,前者记录了文件名,文件创建时间,文件类型等基本信息;后者分块存储了文件的二进制数据(并支持加密这些二进制数据),分块的意思是把文件按照指定大小分割,然后存入多个文档中,“fs.files”怎么知道它对应的文件在哪?

在“fs.chunks”中有个”files_id”键对应“fs.files”的“_id”,“fs.chunks”还有一个键(int型)“n”,它表明这些块的先后顺序,这两个集合中的“fs”也是可以通过参数自定义的。

一个fs.files集合中的一条记录内容如下,即一个file的信息如下:



对应的fs.chunks中的chunk如下:



默认chunk的大小是256K:

写入:

如果文件大于chunksize,则把文件分割成多个chunk,再把这些chunk保存到fs.chunks中,最后再把文件信息存入到fs.files中。

读取:

先据查询的条件,在fs.files中找到一个合适的记录,得到“_id”的值,再据这个值到fs.chunks中查找所有“files_id”为“_id”的chunk,并按“n”排序,最后依次读取chunk中“data”对象的内容,还原成原来的文件。

Mongo自带一个实现mongofiles,基本操作如下:

1. 列出所有文件:



2. 上传一个文件:



3. 下载一个文件:



4. 查找文件:



参数说明:

-d 指定数据库,默认是fs

-u-p 用户名,密码

-h 指定主机

-port 指定主机端口

-c 指定集合,默认是fs

-t 指定文件的MIME类型,默认会忽略

-l 指定路径

MongoDB文件存取操作:

http://www.cnblogs.com/lipan/archive/2011/03/21/1989409.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息