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. BootStrap中关于input-group的问题(未解决)

    ****************************************2016年1月6日 23:08******************************* 本来想实现的如下功能: 但 ...

  2. Init.rc分析(刘举奎)

    http://www.360doc.com/content/14/0926/20/13253385_412582822.shtml

  3. 如何使用UDP进行跨网段广播(转)

    源:http://blog.chinaunix.net/uid-22670933-id-3716646.html 广播域首先我们来了解一下广播域的概念.广播域是网络中能接收任一台主机发出的广播帧的所有 ...

  4. unity3d之在屏幕上画线

    如何在屏幕上画线,简单的代码如下: using UnityEngine; public class Test : MonoBehaviour { void OnGUI() { GL.LoadOrtho ...

  5. PHP获取当期前运行文件的路径,名字,服务器路径

    <?phpecho "显示脚本文件的相对路径和文件名:\"".$_SERVER["PHP_SELF"]."\"<br& ...

  6. Redis 代理 twemproxy

    4台 redis 服务器 172.16.1.37:6379   - 1 172.16.1.36:6379   - 2 172.16.1.35:6379   - 3 172.16.1.34:6379   ...

  7. sublime C++ build system配置体验

    近期准备实习,于是终于步入了sublime的阵营,sublime确实性感. 在配置win7下C++编译运行集成环境的时候遇到点问题,于是接触了一下JSON格式,最后终于自己搞定了.. 参考文档:htt ...

  8. 25个Linux性能监控工具

    一段时间以来,我们在网上向读者介绍了如何为Linux以及类Linux操作系统配置多种不同的性能监控工具.在这篇文章中我们将罗列一系列使用最频繁的性能监控工具,并对介绍到的每一个工具提供了相应的简介链接 ...

  9. Android SQLite总结[转载]

    [转载] :http://blog.163.com/zqy216_2008/blog/static/4119371820119954812509/ 最近在做的项目涉及到了SQLite,大学时没有好好学 ...

  10. Laravel邮件发送问题小解

    在Laravel中已经有内置了发送邮件的功能,通过 Mail::send 可发送邮件,但要使用这个函数必须先进行相关配置. 在 /app/config/mail.php 中设置你的邮件参数,如下: 1 ...