GridFS

mongoDB除了保存各种文档(JOSN结构)外还能够保存文件。GridFS规范提供了一种透明机制,可以将一个大文件分割成为多个较小的文档,这样的机制允许我们有效的保存大文件对象,特别对于那些巨大的文件,比如视频、高清图片等。

GridFS使用两个表来存储数据:

  • files:包含元数据对象

文件的元数据放在这个集合里面,默认fs.files。这个里面的每个文档表示GridFS中的一个文件,与文件相关的自定义元数据也保存在其中,除了用户自定义的键,GridFS还有默认的一些键:

  1. _id:文件唯一的id,在块中为“files_id”键的值存储
  2. length:文件内容总的字节数
  3. chunksize:每块的大小,以字节为单位。默认25K,可以调整
  4. uploadDate:文件存入的时间
  5. md5:文件内容的md5校验,由服务端生成
  • chunks:包含其他一些相关信息的二进制块

GridFS的块有个单独的集合。默认情况下,块将使用fs.chunks集合,如果有需要可以覆盖。这个块集合里面文档的结构非常简单:

 {
"_id":ObjectId("......"),
"n":0,
"data":BinData("......"),
"files_id":ObjectId(".......")
}
  1. _id:标志唯一
  2. n:表示块的编号,也就是这个块在原文件中的顺序号
  3. data:包含组成文件块的二进制数据
  4. files_id: 包含这个块元数据的文件文档的"_id"

使用mongofile来操作GridFS:

   //将 “aaaa” 写入foo.txt文件中
c:\MongoDB\mongodb_win32_x86_64_2.2.7\bin>echo "aaaa" > foo.txt
//将foo.txt保存到GridFS中
c:\MongoDB\mongodb_win32_x86_64_2.2.7\bin>mongofiles.exe put foo.txt
connected to: 127.0.0.1
added file: { _id: ObjectId('53449f0becdebde54ff76105'), filename: "foo.txt", ch
unkSize: 262144, uploadDate: new Date(1397006091696), md5: "819596956779801cced4
fb21379bf023", length: 9 }
done!
//查看
c:\MongoDB\mongodb_win32_x86_64_2.2.7\bin>mongofiles.exe list
connected to: 127.0.0.1
foo.txt 9
//获取
c:\MongoDB\mongodb_win32_x86_64_2.2.7\bin>mongofiles.exe get foo.txt
connected to: 127.0.0.1
done write to: foo.txt

命令说明

put:将文件系统中的一个文件添加到GridFS

list:会把所有添加到GridFS中的文件列出来

get:put的反向操作

在mongodb工具中查看GridFS

MongoDB_GridFS_存储文件的更多相关文章

  1. Android获取可存储文件所有路径

    引言:大家在做app开发的时候,基本都会保存文件到手机,android存储文件的地方有很多,不像ios一样,只能把文件存储到当前app目录下,并且android手机由于厂家定制了rom,sdcard的 ...

  2. mysql下存储文件问题

    ibdata1 & mysql-bin 问题:磁盘空间报警,经查发现ibdata1和mysql-bin日志占用空间太多(其中ibdata1超过120G,mysql-bin超过80G) 原因:i ...

  3. 【荐】PHP操作MongoDB GridFS 存储文件,如图片文件

    GridFS是MongoDB的一个内置功能,它提供一组文件操作的API以利用MongoDB存储文件,GridFS的基本原理是将文件保存在两个Collection中,一个保存文件索引,一个保存文件内容, ...

  4. 【MongoDB】6.关于MongoDB存储文件的 命令执行+代码执行

    参考:http://www.runoob.com/mongodb/mongodb-gridfs.html 1.命令执行 MongoDB GridFS GridFS 用于存储和恢复那些超过16M(BSO ...

  5. Android使用Linux mount获取SdCard存储文件夹

    Android的智能手机各不同样.如今非常多Android智能手机都是自带存储,有的还带有扩展内存的Sdcard卡槽. 在Android开发中,非常多时候依据Android提供的获取SdCard存储方 ...

  6. DLNA架构在机顶盒上播放云存储文件的实现

    DLNA 架构在机顶盒上播放云存储文件的实现   摘要: 随着越来越多的数码设备,音像设备等对 UPNP 协议的支持和普及,业界对多媒体内容提供服务的需求越越来越强烈,为了实现遵循 UPNP 协议和  ...

  7. Android - 数据存储 -存储文件

    Android使用的文件系统和其他平台的基本磁盘的文件系统很相似.这里将要介绍如何使用File API在Android文件系统中读写文件. File对象适合按顺序读写大量的数据.例如,适合图片文件或者 ...

  8. 使用 gridfs-stream 存储文件遇到的一个坑。

    前一段时间参读了某个coder写的用 gridfs-stream 来存储文件,感觉不错就自己用 gridfs-stream 模块写了一个文件存储服务,但是发现存储的文件总是删不掉, 我调用的是GFS的 ...

  9. wp8数据存储--独立存储文件 【转】

    出自 : http://www.cnblogs.com/MyBeN/p/3339019.html 文章篇幅有点大,建议去源网看看 1.调用手机的独立存储 例如:IsolatedStorageFile ...

随机推荐

  1. mahout 查看kmeans结果的命令

    $mahout seqdumper -i  output/clusters-1/part-r-00000 直接在控制台上显示,要写入文件可以在后面加上-o <输出路径> mahout中的k ...

  2. (转)多个mapreduce工作相互依赖处理方法完整实例(JobControl)

    多个mapreduce工作相互依赖处理方法完整实例(JobControl) 原文地址:http://mntms.iteye.com/blog/2096456?utm_source=tuicool&am ...

  3. 2015 HDU 计算机学院 院赛 1003 玩骰子

    Problem Description   Nias与Ains都特别喜欢玩骰子,而且都自以为比对方玩得更溜.  终于有一天,他们决定用骰子来一决高下!  一般的骰子玩法已经不足以体现他们的水平了,于是 ...

  4. Python3基础 函数 收集参数+普通参数 的示例

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  5. 合并BIN文件的两种方法(转)

    源:http://blog.chinaunix.net/uid-20745340-id-1878803.html 合并BIN文件的两种方法 在单片机的开发过程中,经常需要将两个单独的BIN文件合并成一 ...

  6. Unity3d之剥离alpha通道

    unity中, 将图集的 alpha 通道剥离出来可减少包体大小和内存使用大小. 方法是将原来的一张 rgba 图分成一张 rgb 和一张 alpha 图,android上rgb和alpha图均采用e ...

  7. 使用MySQL命令行新建用户并授予权限的方法

    MySQL命令行能否实现新建用户呢?答案无疑是肯定的.而且在使用使用MySQL命令行新建用户后,还可以为用户授予权限. 首先要声明一下:一般情况下,修改MySQL密码,授权,是需要有mysql里的ro ...

  8. Blog`s CSS

    #div_digg { position: fixed; bottom: 10px; width: 50px; right: 50px; filter: alpha(opacity=20); opac ...

  9. python+django+bootstrap

    python install django 置环境变量,将这个目录添加到系统环境变量中: C:\Python36\Lib\site-packages\django\ cmd下测试: 1.输入pytho ...

  10. Nginx 负载均衡 后端服务器获取前端用户真实IP

    Nginx 后端 日志文件 获取的都是 前端 负载均衡器的IP 想要获取用户的真实IP 必须 使用Nginx 的模块  http_realip_module  才行!! 1. 编译 Nginx 的时候 ...