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

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中的二进制数据都没有了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于c#:Filter Serilog日志取决于上下文源到不同的接收器?

我有一个.NET Core 2.0应用程序,可以在其中成功使用Serilog进行日志记录。现在,我想将一些数据库性能统计信息记录到一个单独的接收器中(它们不是用于调试的,这基本上是应用程序中所有其他记录的目的,因此我想将它们分开)&#xf…

C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)

本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列、strlen的递归解法、汉诺塔和全排列递归算法。 一、递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思想。 这个是常见的一种数学算法,其实它…

【物理动图】物理老师一针见血:50张动图看懂高中物理

全世界只有3.14 % 的人关注了青少年数学之旅相互作用作用力与反作用力的特点是什么?摩擦力的大小跟什么有关系?图中两个弹簧的弹力大小是否一样?若一样,为什么?自行车前后轮所受力的方向是什么?物块所受支持…

变动翻屏展示图片效果

<HTML><HEAD><TITLE>变动展示图片效果</TITLE><META http-equivContent-Type content"text/html; charsetgb2312" /><STYLE typetext/css>A:link { COLOR: #00007f; TEXT-DECORATION: none}A:visited { COLOR: #00007f; T…

linux expr格式,计算2-expr命令举例

# **一、expr命令**## **1.语法和功能**只能用于整数运算和字符串长度、匹配等运算处理expr 2 2expr 2 - 2expr 2 \* 2expr 2 / 2i5;iexpr $1 6;echo $i> 说明&#xff1a;运算符及用于计算的数字左右都至少有一个空格&#xff0c;否则会报错乘号需要转义在shell中进行变量…

打造史上最小尺寸.Net Core单文件应用程序

.Net Core支持将应用程序发布成单文件进行部署和分发。以下示例将Windows应用作为独立的单文件应用程序发布&#xff1a;dotnet publish -r win-x64 -c Release /p:PublishSingleFiletrue /p:PublishTrimmedtrue /p:IncludeNativeLibrariesForSelfExtracttrue查看publish目录&a…

别说了,叫爸爸吧! | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;视频源网络&#xff0c;侵权删&#xff09;女主最后的微笑意味深长啊↓ ↓ ↓

嵌入式-C语言面试题【转】

1. 用预处理指令#define 声明一个常数&#xff0c;用以表明1年中有多少秒&#xff08;忽略闰年问题&#xff09; #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情&#xff1a; 1). #define 语法的基本知识&#xff08;例如&#xff1a;不能以分号结束&a…

华硕路由器 linux上不了网,华硕ASUS路由器连不上网怎么办?

在本文中将给大家详细的介绍&#xff0c;华硕(ASUS)路由器连不上网/无法上网的解决办法&#xff0c;请按照下面的步骤进行操作。1. 首先&#xff0c;检查你的宽带是否可以正常使用&#xff0c;可以通过下面的方法进行测试。(1)观察光猫上的指示灯&#xff0c;如果光信号或者LOS…

NHibernate学习笔记(二):one-to-one关系映射

上一篇&#xff1a;NHibernate学习笔记&#xff08;一&#xff09;&#xff1a;初识NHibernate本文的内容&#xff1a;&#xff11;&#xff0e;介绍NH如何处理对象间one-to-ont的映射关系&#xff1b;经验教训&#xff1a;&#xff11;&#xff0e;操作一对一关联关系中的一个…

【汇总】多种方法教你绕过 TPM 2.0 安装 Windows 11 操作系统

此前我们曾介绍三种方法绕过 TPM 2.0 来安装 Windows 11 操作系统。方法一&#xff1a;删除 appraiserres.dll 文件方法二&#xff1a;替换 appraiserres.dll 文件方法三&#xff1a;替换 install.wim 文件今儿我们再谈谈“大法好”的注册表&#xff0c;希望能帮助大家成功安装…

【物理笑话】学过物理的人才能看懂的笑话,你能看明白几个?

全世界只有3.14 % 的人关注了青少年数学之旅1丈夫买了几斤廉价藕&#xff0c;满以为可对妻子炫耀了。不料妻子破口大骂&#xff1a;笨蛋&#xff01;为何不买别的菜&#xff0c;这藕一斤少说也有半斤窟窿啊&#xff01;还说便宜&#xff1f;2第一次坐飞机的两位老妇人在飞机起飞…

c语言分配多一个字符空间,关于C语言动态给字符串分配内存空间问题

在动态分配的空间中如何输入字符串&#xff0c;关于C语言动态给字符串分配内存空间的问题相信很多朋友都不太了解&#xff0c;下面维维带来相关解答&#xff0c;赶紧看看吧。用malloc来分配内存空间。即输入几个字节的字符 系统就自动帮我分配几个字节的大小。。char Str(XXXX)…

在web网页中正确使用图片格式

今天又看了一遍淘宝平四分享的PPT&#xff0c;以前转载网址&#xff1a;http://blog.sina.com.cn/s/blog_995c1f6301017fd2.html

NET问答: 如何在 dynamic 集合上使用 Linq ?

咨询区 user1618825&#xff1a;有没有一种方式可以将 dynamic 对象转成 可过滤的 IEnumerable 类型对象&#xff1f;比如下面的代码&#xff1a;dynamic data JsonConvert.DeserializeObject(response.Content);然后用Linq去访问var a data.Where(p > p.verified true)回…

为什么国外程序员加班少?他们这样评价国内996和技术公众号

有人统计过&#xff0c;我们平均每天花在看内容上的时间是5-6小时与其每天被各种看过就忘的内容占据时间不如看点真正对你有价值的信息下面小编为你推荐几个高价值的公众号它们提供的信息能真正提高你生活的质量长按二维码&#xff0c;选择【识别图中二维码】关注Python爱好者社…

c语言编程每日一练教程,每日一练 | C语言之指针

原标题&#xff1a;每日一练 | C语言之指针练习导言学习 C 语言的指针既简单又有趣。通过指针&#xff0c;可以简化一些 C 编程任务的执行&#xff0c;还有一些任务&#xff0c;如动态内存分配&#xff0c;没有指针是无法执行的。所以&#xff0c;想要成为一名优秀的 C 程序员&…

dynamic flash xml news----滚动新闻

今天有人问起这个问题&#xff0c;抽出晚上的一点时间&#xff0c;做了一个&#xff0c;时间紧难免有不足之处&#xff0c;如果发现bug&#xff0c;请以在贴出。演示&#xff1a;代码&#xff1a;代码://copyright by webstudio.com.cn 2005-4-7 system.useCodepagetrue; Stage…

C# 代码生成二维码方法及代码示例(QRCoder)

背景二维码是越来越流行了&#xff0c;很多地方都有可能是使用到。如果是静态的二维码还是比较好处理的&#xff0c;通过在线工具就可以直接生成一张二维码图片&#xff0c;比如&#xff1a;草料二维码。但有的时候是需要动态生成的&#xff08;根据动态数据生成&#xff09;&a…

你对手机打字一无所知!| 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;视频源网络&#xff0c;侵权删&#xff09;你真的会打字吗↓ ↓ ↓