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

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

[neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles list

[sudo] password for neil:

connected to: 127.0.0.1

[neil@neilhost ~]$ tar zcf mongodbBook.tar.gz Downloads/MongoDB权威指南.pdf

[neil@neilhost ~]$ ll mongodbBook.tar.gz

-rw-rw-r--. 1 neil neil 203 3月  16 19:10 mongodbBook.tar.gz

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

[neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles put ./mongodbBook.tar.gz

connected to: 127.0.0.1

added file: { _id: ObjectId('5506bc01581b37b38b49fecd'), filename: "./mongodbBook.tar.gz", chunkSize: 261120, uploadDate: new Date(1426504705885), md5: "85c0c93f51ebe9c609ffe4f9da71c63e", length: 203 }

done!

[neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles list

connected to: 127.0.0.1

./mongodbBook.tar.gz203

[neil@neilhost ~]$

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

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

[neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongo

[sudo] password for neil:

MongoDB shell version: 2.6.8

connecting to: test

> show tables

fs.chunks

fs.files

system.indexes

>

>

> db.fs.files.find()

{ "_id" : ObjectId("5506bc01581b37b38b49fecd"), "filename" : "./mongodbBook.tar.gz", "chunkSize" : 261120, "uploadDate" : ISODate("2015-03-16T11:18:25.885Z"), "md5" : "85c0c93f51ebe9c609ffe4f9da71c63e", "length" : 203 }

> db.fs.chunks.find()

{ "_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=") }

>

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

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

4mongodbBook.tar.gz

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

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

[neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles list

connected to: 127.0.0.1

./mongodbBook.tar.gz203

[neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles get mongodbBook.tar.gz

connected to: 127.0.0.1

ERROR: file not found

[neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles get ./mongodbBook.tar.gz

connected to: 127.0.0.1

done write to: ./mongodbBook.tar.gz

[neil@neilhost ~]$ ll

总用量 44

drwxr-xr-x. 2 neil neil 4096 2月  13 18:36 Desktop

drwxr-xr-x. 3 neil neil 4096 2月  13 21:35 Documents

drwxr-xr-x. 5 neil neil 4096 3月  15 21:56 Downloads

-rw-r--r--. 1 root root  203 3月  17 18:27 mongodbBook.tar.gz

drwxr-xr-x. 2 neil neil 4096 2月  13 18:36 Music

drwxr-xr-x. 3 neil neil 4096 3月  15 22:50 Pictures

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

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

之后,有put有get必有delete。

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

[neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles list

[sudo] password for neil:

connected to: 127.0.0.1

./mongodbBook.tar.gz203

[neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles delete ./mongodbBook.tar.gz

connected to: 127.0.0.1

done!

[neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongofiles list

connected to: 127.0.0.1

[neil@neilhost ~]$ sudo /usr/local/mongodb/bin/mongo

MongoDB shell version: 2.6.8

connecting to: test

> db

test

> show collections

fs.chunks

fs.files

system.indexes

> db.fs.files.find()

>

> db.fs.chunks.find()

>

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

linux删除grid数据文件,MongoDB进阶系列(13)——GridFS大文件的添加、获取、查看、删除...相关推荐

  1. 【STC头文件】STC8系列之STC8G头文件寄存器注释

    [STC头文件]STC8系列之STC8G头文件寄存器注释 特殊功能寄存器介绍 定时器/计数器工作方式寄存器(TMOD ) 符号 地址 B7 B6 B5 B4 B3 B2 B1 B0 TMOD(定时器模 ...

  2. android 获取文件夹的字节数,android java file 清理垃圾获取文件大小 删除文件等操作...

    这么久没有写博客了,今天给大家分享一些多file文件的操作.一般可以用到清理垃圾获取文件大小 删除文件等操作,可以直接用于工具类里面,直接做操作便可以 public final class FileU ...

  3. python读取大文件-Python如何读取、拆分大文件

    简述 最近和第三方数据接触较多,数据量也开始陡增,从一开始的1KW行,最大到了1亿行,这让我这个常年处理"小数据'的人有点捉襟见肘.本来数据放在hive中也是可以操作的,但是有时候需求是做一 ...

  4. 快速传输大文件,怎么通过网络传大文件给对方(1G以上)

    在生活和工作中,我们总是要发送一些比较大的文件给别人,或者在自己的设备之间.在互联网日益发达的今天,我们可以用什么方法通过互联网快速传输大文件,发送1G以上的文件? 一.使用QQ传 在电脑上打开QQ, ...

  5. php 5.6 文档,文件存储 | 进阶系列 | Laravel 5.6 中文文档

    文件存储 由 学院君 创建于3年前, 最后更新于 1年前 版本号 #2 31608 views 3 likes 0 collects 简介 Laravel 基于 Frank de Jonge 开发的 ...

  6. linux清除文件后df还是满的,Linux系统下如何用du和df命令清除大文件?

    Linux系统中如果发现/home目录下剩余空间不足,可以使用du和df命令来对找到大文件,并且对它们进行删除,从而腾出足够的空间.那么如何用du和df命令清除大文件呢? 具体方法: 步骤1. du ...

  7. php读取大文件某行内容,php读取大文件最后几行数据的实现代码

    /* * 读取大文件最后几行数据 * by www.jbxue.com */ $file = $handledir.'/venocap.1'; $fp = fopen($file, "r&q ...

  8. eeglab中文教程系列(13)-导入cnt文件

    目录 1.导入文件 2.查看数据 本教程为脑机学习者Rose发表于公众号:脑机接口社区 .QQ交流群:903290195 1.导入文件 先打开eeglab,并导入cnt文件,操作如下: 点击后选择对应 ...

  9. linux目录怎么自动生成,情景linux--如何快速生成大文件?

    情景 在写情景linux--如何解决服务器日志过大导致的磁盘空间不足?(实践篇)时,因为要实际演示,所以需要快速创建一个大文件.其实,在实际工作过程中,有些时候是有这种需求的.今天就将其作为一个话题探 ...

最新文章

  1. 从事仪表专业学c语言有用吗,仪器仪表工程就业方向
  2. Tomcat 中文乱码 设置UTF-8编码 问题解决办法
  3. 《Android游戏编程入门经典》——1.7节小结
  4. MIME Type的介绍
  5. OSGI概念理解和入门
  6. 团队作业4——第一次项目冲刺(Alpha版本) Day1
  7. 平时使用比较多的js脚本
  8. X 1 BT5kali
  9. 如何下载sonar?
  10. PTC Creo 8.0.0.0 x64 Multilingual
  11. xp系统如何开启445端口?
  12. android10.0(Q) MTK 系统相机打开 USBCamera
  13. 深度学习——安装Nvidia 驱动(亲测有效)
  14. Pormetheus(普罗米修斯) 采用blackbox_exporter实现监控
  15. 微信公众平台服务器配置时token验证失败
  16. 【论文阅读笔记】Rethinking the Evaluation of Video Summaries 视频摘要评估
  17. beta值是一种风险指数
  18. 安卓开机linux图标,在启动栏制作android studio启动图标
  19. 固定系数与自适应结合的主动降噪耳机设计实验
  20. linux下通过wifi连接网络

热门文章

  1. 张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用
  2. 新数据革命:开源图形化数据引擎Hawk5发布
  3. dump解析入门-用VS解析dump文件进行排障
  4. DotNetCore跨平台~Dockerfile的解释
  5. Unity 游戏用XLua的HotFix实现热更原理揭秘
  6. .NET Core dotnet 命令大全
  7. 【ArcGIS遇上Python】ArcGIS Python按照指定字段批量筛选不同类型的图斑(以土地利用数据为例)
  8. Android之解决键盘覆盖编辑框问题
  9. AndroidStudio自定义属性xmlns无法识别问题解决in Gradle projects,always use http://schemas.android.com/apk/res-auto
  10. Qt 第一步 HelloWorld 的第一个程序