介绍了GridFS使用MongoDB学习笔记

为GridFS简介

GridFS是MonDB的一个内置函数,可以用来存储大量的小文件。

GridFS使用

mondb提供一个命令行工具,monfiles,处理GridFS,

列出所有文件:

复制代码代码如下所示:

monfiles列表



上传文件:

复制代码代码如下所示:

monfiles把xxx.txt



下载文件:

复制代码代码如下所示:

monfiles得到xxx.txt



查找文件:

复制代码代码如下所示:

将找到xxx文件名中包含的所有文件。

monfiles搜索XXX

/ /发现所有的文件名加上XXX文件

monfiles列表XXX



参数描述:

- D specifies the database, the default is FS, Monfiles list - D testGridfs

- p指定用户名、密码。

h指定主机

-端口指定主机端口。

- c指定集合名,默认为fs。

t指定文件的MIME类型,默认情况下忽略该文件的MIME类型。

GridFS的实现原理

在数据库中,GridFS使用fs.chunks和fs.files默认存储文件。

fs.files采集存储的文件的信息,和fs.chunks存储文件数据。

在fs.files集记录的内容如下:一个文件的信息如下:

复制代码代码如下所示:

{

_id :ObjectId(4f4608844f9b855c6c35e298 ),唯一的ID / /,可以是用户定义的类型

文件名

长度:778,文件长度

分片:262144, / /块的大小

uploaddate :聚类分析(2012-02-23t09:36:04.593z ) / /上传时间,

MD5:e2c789b036cfb3b848ae39a24e795ca6 / /文件的MD5值

内容类型:文本/平原 / / MIME类型的文件

元:空/其他信息文件,默认是不元的关键,用户可以定义任何BSON对象

}



在相应的fs.chunks块如下:

复制代码代码如下所示:

{

_id :ObjectId(4f4608844f9b855c6c35e299 , / /块)的ID

files_id :ObjectId(4f4608844f9b855c6c35e298 , / /)文件ID、对象fs.files,相当于国外的关键fs.files集

N:0 /几块块文件,如果文件大于分片,将分为多个块的块

Data: BinData (0 QGV...) / / binary data file, the specific content is omitted here.

}



默认块的大小为256K。

所以,当文件被存储在GridFS的过程,如果文件大于分片,将文件分割成多个块,将块将被保存到fs.chunks,然后文件信息将被存储在fs.files。

读取文件时,首先根据查询条件,找到一个合适fs.files记录,得到_id的值,然后根据该fs.chunks files_id _id找到所有的块的值,按N,最后为了读取的块数据对象的内容,恢复原状文件。

注意事项

1.gridfs不自动处理MD5相同的文件,和相同的MD5文件,如果你想在GridFS只有一个存储,用户将自己处理它。的MD5值的计算是由客户端完成。

2、由于GridFS文件保存数据,在文件上传过程fs.chunks,最后保存文件的信息,fs.files,如果上传的文件有一个失败,就有可能出现在fs.chunks.these垃圾数据数据可以定期清理垃圾。