为GridFS简介
MonDB的
文件都存储在BSON格式,
支持二进制数据
类型,当我们
保存二进制格式的数据直接mondb的文件,但是当文件太大,如
图片和
视频,每个文件的长度是有限的,所以monDb将提供一个标准——GridFS
处理大文件。
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 /几块块文件,如果文件大于分片,将分为多个块的块
数据:bindata(0QGV…) / /二进制
数据文件,具体内容这里省略。
}
默认大小为256K,所以文件存储在GridFS过程。如果文件大于分片,该文件将被分割为多个块,然后块保存在fs.chunks,最后文件信息存储在fs.files。
读取文件时,根据
查询条件,找到一个合适fs.files记录,得到_id的值,然后根据该fs.funks files_id _id找到所有的块的值,并根据N
排序,最后为了阅读在大块的数据对象的内容,
恢复原始文件。
注:
1,GridFS不自动处理MD5相同的文件。对于MD5相同的文件,如果我们想在GridFS和用户处理只有一个存储,MD5值的计算是由客户端完成。
2,因为在上传过程fs.chunks GridFS是将数据保存到文件,然后保存文件信息的fs.files,所以如果你没有上传文件的过程中,有可能在fs.chunks垃圾数据,垃圾数据可以定期
清理。