1. 一个Mongo文档最大4M.
  2. GridFS不依赖于MongoDB, 其他符合规范的驱动都可以访问它。
  3. GridFS包含两部分:一部分存储文件名和其他metadata; 另一部分存储实际的文件,通常分成一个个大小为256k的小块。
    这两个部分通常被命名为files和chunks,在fs命名空间下,当然,这些都可以通过配置来更改。当你想区分不同的文件类型时,比如区分图片和视频,使用不同的命名空间是有用的。
  4. Mongofiles工具:
  1. 列出mongofiles.
    mongofiles list
    如果要访问远程服务器,用-h 比如:
    mongofiles list –h remoteserver1

     Mongo读书笔记1 -- GridFS_数据库

  1. 上传文件:
    monofiles put <文件路径>
    上传后如果用mongofiles list来查看,发现存储的名字就是原文件的完成路径,但是实际上是存在GridFS中。也就是说,如果把原文件删了,GridFS还是可以查到的。
    Mongo读书笔记1 -- GridFS_上传_02
  2. 获取文件 :
    mongofiles get <文件路径>
    注意:这一操作会覆盖实际的物理文件。比如:把一个文件传到GridFS后,然后做了一些更改,再执行get操作,那么这段时间的更改都会被覆盖掉。
    Mongo读书笔记1 -- GridFS_上传_03
  3. 删除文件。
    mongofiles delete <文件路径>
  4. 搜索文件
    mongofiles search <关键字>

 

  1. 当上传同一文件两次时,mongo会存两个同名的文件,只有_id属性不同。
  2. GridFS默认的chunk大小是 256k, 知道这个大小是必要的,因为你可以知道你的文件存储的时候被分成多少块。当然数据库驱动会为你处理所有的事情,你在存储的时候不需要担心这些chunk size相关的问题。
  3. Mongo依赖于MD5来实现security 和 integration, security是为了防止没有权限的用户访问了不该他访问的资源,integration确保文件不被更改。
    MD5现在已经不安全,理论上可以产生用同一个md5 checksum(或者md5 hash)产生两个不同的文件(这种情况被称为collision),但是由于做此事的工作量非常大,而且把文件的其他属性用做成一样的非常难,而且有的没有意义,所以实际上还是可以继续用MD5.
    如果你基于安全性考虑,最好用SHA家族的算法,最理想的是SHA-256或者SHA-512, 尽管理论上这些算法也有风险,但是目前还没有遇到实际这样做出的例子。但是,对于用户名密码等重要的数据,你可能要考虑用SHA家族的算法来进行加密.
  4. 查看GridFS 的命令。
  1. db.fs.files.find() 查看GridFS metadata的集合。
    Mongo读书笔记1 -- GridFS_上传_04
  2. db.fs.chunks.find() 查看实际的文件块,以256k为单位。
    Mongo读书笔记1 -- GridFS_数据库_05
     
    这里需要注意的是,GridFS只是数据存储的地方,当files集合中的一条记录被删除时,GridFS不会自动删除chunks中对应的记录,需要数据库驱动程序(比如Mongo c++ driver)来做这种清理工作。所以,虽然你可以在程序中直接操作files集合,但是最好还是通过数据库驱动程序(比如比如Mongo c++ driver)来操作。
     

 

(The Definitive Guide to MongoDB)