mongoDB——GridFS存储机制

    mongoDB的文档以BSON格式存储,支持二进制数据类型,所以,可以把文件的二进制格式的数据直接保存到MongoDB的文档中,但是每个文档的长度是有限制的,而我们一般上传的图片、视频等文件又比较大。针对这种情况,mongoDB提供了一种处理大文件的规范——GridFS。

    一、实现原理:

     将要存储的文件分成若干块儿,每一块作为一个单独的文档来存储,每块默认大小为256k。用两个集合来存储一个文件:fs.files与fs.chunks。

      fs.files存放文件信息

     

     _id:唯一标识   length:文件总长度    chunksize:没块儿的大小,默认为256k      uploadDate:时间戳    md5:文件内容的md5校验和,值由服务器端生成,用于计算上传块的md5校验和,用户可以校验md5的值确保文件正确上传。 contentType:文件类型    还可以添加其他键来标识这个文件,例如,可以是上传者的信息。

   

      fs.chunks:存放文件的数据

     

       _id:唯一标识    files_id:文件集合中的_id    n:文件的第几个块儿   data:文件的二进制数据


      二、保存文件的流程

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

     三、读取文件的流程

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

     四、注意:

           GridFS在上传文件过程中是先把文件数据保存到fs.chunks,最后再把文件信息保存到fs.files中,所以如果在上传文件过程中失败,有可能在fs.chunks中出现垃圾数据。这些垃圾数据可以定期清理掉。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值