GridFS是一种在MongoDB中存储大二进制文件的机制,使用GridFS的原因有以下几种:

存储巨大的文件,比如视频、高清图片等。

利用GridFS可以简化需求。

GridFS会直接利用已经建立的复制或分片机制,故障恢复和扩展都很容易

GridFS可以避免用户上传内容的文件系统出现问题。

GridFS不产生磁盘碎片。

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

fiiles包含元数据对象(如文件的名称、上传的时间)

chunks包含其他一些相关信息的二进制块

为了使度个GridF命名为一个单一的数据库,文件和块都有一个前缀,默认情况下,前缀是fs。

所以任何默认的GridFS存储将包括命名空间fs.files和fs.chunks。(图片可以命名为ps.files和ps.chunks,视频可以命名为vs.files和vs.chunks)。

各种第三方语言可以更改其前缀。

本文是oschina的happyBKs的文章,请自己标明出处:http://my.oschina.net/u/1156339/blog/388156

使用GridFS mongofiles

mingofiles是从命令行操作GridFS的一种工具

三个命令:put(存储) get(取得) list(列表)

例如:我们将“testfile”这个文件存储到库中,具体做法是 ./mongofiles put testfile

首先,我们尝试压缩归档一个文件。

  1.  
    [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles list
  2.  
    [sudo] password for neil: 
  3.  
     
  4.  
    connected to: 127.0.0.1
  5.  
    [neil@neilhost ~]$ tar zcf mongodbBook.tar.gz Downloads/MongoDB权威指南.pdf 
  6.  
    [neil@neilhost ~]$ ll mongodbBook.tar.gz 
  7.  
    -rw-rw-r--. 1 neil neil 203 3月  16 19:10 mongodbBook.tar.gz

下面我们将这个归档文件存储到mongoDB中。默认存放到test数据库中。

  1.  
    [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles put ./mongodbBook.tar.gz 
  2.  
    connected to: 127.0.0.1
  3.  
    added file: { _id: ObjectId('5506bc01581b37b38b49fecd'), filename: "./mongodbBook.tar.gz", chunkSize: 261120, uploadDate: new Date(1426504705885), md5: "85c0c93f51ebe9c609ffe4f9da71c63e", length: 203 }
  4.  
    done!
  5.  
    [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles list
  6.  
    connected to: 127.0.0.1
  7.  
    ./mongodbBook.tar.gz 203
  8.  
    [neil@neilhost ~]$

之后,我们进入mongodb客户端查看test数据库,发现里面多了两个集合,一个是fs.files,查看之后发现里面记录着上传文件的以下像信息:文件名称、上传时间、md5码、文件长度、大小等。

fs.chunks查看显示二进制信息。

  1.  
    [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongo
  2.  
    [sudo] password for neil: 
  3.  
    MongoDB shell version: 2.6.8
  4.  
    connecting to: test
  5.  
    > show tables
  6.  
    fs.chunks
  7.  
    fs.files
  8.  
    system.indexes
  9.  
  10.  
  11.  
    > db.fs.files.find()
  12.  
    { "_id" : ObjectId("5506bc01581b37b38b49fecd"), "filename" : "./mongodbBook.tar.gz", "chunkSize" : 261120, "uploadDate" : ISODate("2015-03-16T11:18:25.885Z"), "md5" : "85c0c93f51ebe9c609ffe4f9da71c63e", "length" : 203 }
  13.  
    > db.fs.chunks.find()
  14.  
    { "_id" : ObjectId("5506bc011b359e376ad0011e"), "files_id" : ObjectId("5506bc01581b37b38b49fecd"), "n" : 0, "data" : BinData(0,"H4sIADm6BlUAA+3OvwsBcRjH8a+uZOE/kNuYuOO+btetMvkD1CHFnfzISgYDZqWU0d9g4w+x3W1mq7uUkmKgpN6v4Xnq+Tz1PJY7ctpuze7nyq7TdK2Sv5l6u4m/mHnLVbZrN8TntEDR0MKum/Kh30gp9LzUdFkIiwhSwzCFqn3h9lvD/qDWU1Xh1FvtV3vv8j+VmsdEfB+tCuV8iMSDwXF7qXQS5va+MTaV9SmZFpmf/QgAAAAAAAAAAAAAAAAAeHYFpzavuwAoAAA=") }
  15.  
    >

这个文件不大,所以二进制信息很短。

  1.  
    [neil@neilhost ~]$ du mongodbBook.tar.gz 
  2.  
    4 mongodbBook.tar.gz

接下来,我尝试将mongodbBook.tar.gz的原文件删除,然后从mongodb中获取恢复。

这里用到的是mongofiles get命令。这里注意的是

  1.  
    [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles list
  2.  
    connected to: 127.0.0.1
  3.  
    ./mongodbBook.tar.gz 203
  4.  
    [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles get mongodbBook.tar.gz
  5.  
    connected to: 127.0.0.1
  6.  
    ERROR: file not found
  7.  
    [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles get ./mongodbBook.tar.gz
  8.  
    connected to: 127.0.0.1
  9.  
    done write to: ./mongodbBook.tar.gz
  10.  
    [neil@neilhost ~]$ ll
  11.  
    总用量 44
  12.  
    drwxr-xr-x. 2 neil neil 4096 2月  13 18:36 Desktop
  13.  
    drwxr-xr-x. 3 neil neil 4096 2月  13 21:35 Documents
  14.  
    drwxr-xr-x. 5 neil neil 4096 3月  15 21:56 Downloads
  15.  
    -rw-r--r--. 1 root root  203 3月  17 18:27 mongodbBook.tar.gz
  16.  
    drwxr-xr-x. 2 neil neil 4096 2月  13 18:36 Music
  17.  
    drwxr-xr-x. 3 neil neil 4096 3月  15 22:50 Pictures

这里需要注意的是,后面get的文件名称需要指定路径,这里要加上./,否则会显示文件不存在。

注意,这个./指的不是linux当前的路径,而是在Mongodb的文件存储中的路径。

之后,有put有get必有delete。

接下来看看如何删除MongoDB中的大文件.

  1.  
    [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles list
  2.  
    [sudo] password for neil: 
  3.  
    connected to: 127.0.0.1
  4.  
    ./mongodbBook.tar.gz 203
  5.  
    [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles delete ./mongodbBook.tar.gz 
  6.  
    connected to: 127.0.0.1
  7.  
    done!
  8.  
    [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles list
  9.  
    connected to: 127.0.0.1
  10.  
    [neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongo
  11.  
    MongoDB shell version: 2.6.8
  12.  
    connecting to: test
  13.  
    > db
  14.  
    test
  15.  
    > show collections
  16.  
    fs.chunks
  17.  
    fs.files
  18.  
    system.indexes
  19.  
    > db.fs.files.find()
  20.  
  21.  
    > db.fs.chunks.find()
  22.  
    >

删除之后可以看到fs.files中的元数据和fs.chunk中的二进制数据都没有了。

--------------------- 本文来自 Ghost丶 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/linux_hacher/article/details/79663911?utm_source=copy

GridFS大文件的添加、获取、查看、删除的更多相关文章

  1. Visual Studio 2015 自动生成 的大文件xxx.vc.db的删除问题

    用vs2015创建Visual C++项目,编写生成后,每次都会生成一个project_name.VC.db文件,而且会随着你工程修改运行变的越来越大. project_name.VC.db是sqli ...

  2. 删除Git记录里的大文件

    删除Git记录里的大文件 仓库自身的增长 大多数版本控制系统存储的是一组初始文件,以及每个文件随着时间的演进而逐步积累起来的差异:而 Git 则会把文件的每一个差异化版本都记录在案.这意味着,即使你只 ...

  3. 记一次删除Git记录中的大文件的过程

    app/test/target/ #查看大文件 git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/ ...

  4. 利用Linux的硬连接删除MySQL大文件

    利用Linux的硬连接删除MySQL大文件 http://blog.csdn.net/wxliu1989/article/details/22895201 原理:硬链接基础当多个文件共同指向同一ino ...

  5. Nginx 做代理服务器时浏览器加载大文件失败 ERR_CONTENT_LENGTH_MISMATCH 的解决方案

    此文章仅作为本人的笔记,文章转载自  http://blog.csdn.net/defonds/article/details/46042809 Nginx 做反向代理,后端是 tomcat,chro ...

  6. Linux大文件已删除,但df查看已使用的空间并未减少解决

    在我的生活当中遇到磁盘快满了,这时候准备去删除一些大文件 于是我使用ncdu 查看了一下当前系统占用资源比较多的是那些文件,结果一看是elasticsearch的日志文件,好吧,竟然找到源头了,那就把 ...

  7. 牛客网Java刷题知识点之File对象常用功能:获取文件名称、获取文件路径、获取文件大小、获取文件修改时间、创建与删除、判断、重命名、查看系统根目录、容量获取、获取某个目录下内容、过滤器

    不多说,直接上干货! 获取文件名称.获取文件路径.获取文件大小.获取文件修改时间 FileMethodDemo.java package zhouls.bigdata.DataFeatureSelec ...

  8. 如何安放你的大文件,MongoDB GridFS可以帮助你

    1 简介 众所周知(你不知也当你知),MongoDB是以文档(Document)组织数据的.除了常用于存储Json数据,它也是可以存储普通文件的.我们可以把一些文件以BSOON的格式存入MongoDB ...

  9. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. HDOJ 5213

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5213 BC 上的题,题解很清楚,会莫对的应该不难, 对于一个询问,我们拆成四个询问,开始拆成求区间矩形 ...

  2. 一点点VIM

    VIM 当你喜欢它时,你会发现真的不错,不过配置真是麻烦, 不过万事开头难,当你熟练时真的会发现她的美. syntax on set nu colo evening set mouse=a set c ...

  3. Windows下maven安装配置(包括本地化仓库配置)

    一.下载maven maven官网:http://maven.apache.org/ 下载下来也就是一个压缩文件,解压.我下载的是3.5.2版本,解压之后如下: 路径为 :D:\Program Fil ...

  4. dropwizard问题记录1:如何进行mvn package打包,如何在项目目录下运行

    dropwizard的helloworld入门教程,跟着教程一步步写很容易,但是最后打包时暴露了自己底子太差的缺陷 mvn package操作 之前工作中完全没有接触过这种打包方式,都是直接打war包 ...

  5. DBA总结

    HA MHA(1)从宕机崩溃的master保存二进制日志事件(binlog events);(2)识别含有最新更新的slave:(3)应用差异的中继日志(relay log)到其他的slave:(4) ...

  6. K8S label 操作

    在部署完成 node 节点集群之后,为了更灵活的操控 node 节点,有时候需要对 node 节点进行对各个 node 节点进行 lable 标签标记. 查看各个节点的信息 [root@porxy02 ...

  7. 十步叫你如何无损修复硬盘锁(mbr病毒)

    经常看见有人被锁硬盘  开机以后出现一行红字 FUCK  YOU POJIEZHE  等等云云的 这个问题主要还是病毒对Mbr分区的修改造成的 下面我教给大家一个无损数据   无损硬盘  无需重装系统 ...

  8. C# 通过比对哈希码判断两个文件内容是否相同

    1.使用System.security.Cryptography.HashAlgorithm类为每个文件生成一个哈希码,然后比较两个哈希码是否一致. 2. 在比较文件内容的时候可以采用好几种方法.例如 ...

  9. Neutron配置Floating IP

    下图是由一个虚拟机vm1,一个路由器ext-router,两个网络ext-net及demo-net组成的拓扑结构.要达到的目的很简单,即vm1不仅能使用私网IP和内部的其它虚拟机进行通信,还可以通过e ...

  10. ArcGIS 10.3 for Server新特性介绍

    ArcGIS10.3的正式版立即在美国Esri全球用户大会推出.中国的正式发行时间预计在Esri中国的用户大会.以下就将用户比較关心的ArcGIS 10.3 for Server的新特性给大家进行简单 ...