介绍了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垃圾数据数据可以定期清理垃圾。