6.MongoDB GridFS

昨天浪费了一天的时间做了一个GridFS的Helper,说明自己对很多概念掌握不牢固,模糊不清晰;增加了自己的试错成本;

GridFS的好处

  • 用于存储和恢复超过16M(Bjson文件限制)的文件(如:图片,音频,视频)
  • 也是文件存储的一种方式,文件你存储在电脑里面也可以,存储在电脑里面给一个路径就可以了,为什么要用文件服务器;--> 参考上一篇文章中的内容《文件服务器》再写一遍;

文件你存储在电脑里面也可以,存储在电脑里面给一个路径就可以了,为什么要用文件服务器;

  1. 对文件的操作有记录 比如增删改查,可以花式查询并对结果做操作,之前需要用比较复杂的正则才可以

    做到,比如按照日期查询,尤其是数量高到几万的时候,Window自带的文件管理存在不足;

    查询出一批数据到别的地方,或者对其进行不同比例的压缩,前端有需要的去选择图片;各种维度去处理;

  2. 可以利用索引,比如GridFS建立表的时候会自动对Filename和ID做索引;
  3. 对文件的操作有了一个可以分的比较详细的权限管控,可以任意的与别的权限系统管理
  4. 可以对文件进行拆分,比如我只让你看到一部分这种;

  • GridFS 可以更好的存储大于16M的文件;
  • GridFS 会将大文件分割成多个小的chunk,一般为256k/个,每个chunk讲作为MongDB的一个文档(doucument)被存储在chunks集合中;

GridFS的介绍

GridFS 用两个集合来存储一个文件:fs.files 与 fs.chunks

chunk的中文意思是大块,fs 是默认的存储筐,可以创建自己的存储筐;

每个文件的实际内容被存在chunks(二进制数据)中,和文件有关的meta 数据被存储在files集合中;

以下是简单的fs.files 集合文档

{
   "filename": "test.txt",
   "chunkSize": NumberInt(261120),
   "uploadDate": ISODate("2014-04-13T11:32:33.557Z"),
   "md5": "7b762939321e146569b07f72c62cca4f",
   "length": NumberInt(646)
}

以下是简单的 fs.chunks 集合文档:

{
   "files_id": ObjectId("534a75d19f54bfec8a2fe44b"),
   "n": NumberInt(0),
   "data": "Mongo Binary Data"
}

GridFS 命令式添加文件

  • 使用put命令添加一个mp3 文件

EveryThing 搜索mongofiles.exe,路径上面cmd打开当前路径,输入下面的代码

>mongofiles.exe -d gridfs put 123.mp3

ehco -d 是database 的简称 没有这个数据库会直接创建;
//查看数据库中文件的文档
> db.fs.files.find()
//自己本机无法执行,加了环境变量也没有用处;
>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})
  • 在Studio 3T中查看 fs.files 和fs.chunk (fs 是默认的那个筐)

    可以直接创建自己的筐;

GridFS 帮助类

TODO 发布链接到他博客下面

猜你喜欢

转载自www.cnblogs.com/maanshancss/p/12978150.html