文档章节

MongoDB进阶系列(13)——GridFS大文件的添加、获取、查看、删除

HappyBKs
 HappyBKs
发布于 2015/03/17 22:05
字数 984
阅读 1275
收藏 1

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.gz	203
[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 
4	mongodbBook.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.gz	203
[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.gz	203
[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中的二进制数据都没有了。








© 著作权归作者所有

HappyBKs

HappyBKs

粉丝 661
博文 306
码字总数 481268
作品 0
浦东
程序员
私信 提问
浅尝辄止MongoDB:GridFS

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/82894835 一、为什么使用GridFS GridFS是MongoDB的一个子模块,使用GridFS可以基于M...

wzy0623
2018/09/29
0
0
mongodb Gridfs操作

mongodb Gridfs操作 GridFS 介绍 GridFS是MongoDB规范用于存储和检索大文件,如图片,音频文件,视频文件等。这是一种文件系统用来存储文件,但数据存储于MongoDB集合中。GridFS存储文件比其...

Airship
03/15
0
0
MongoDB系列教程(八):GridFS存储详解

MongoDB系列教程(八):GridFS存储详解 GridFS简介 mongoDB的文档以BSON格式存储,支持二进制的数据类型,当我们把二进制格式的数据直接保存到mongoDB的文档中。但是当文件太大时,例如图片...

开元中国2015
2015/07/25
0
0
mongoDB--GridFS简介

前言 :GridFS从名字来看,就明白是一个文件系统,它是mongodb的一个子模块,使用GridFS可以基于mongodb来持久存储文件.并且支持分布式应用(文件分布存储和读取). 使用场景:如果你的系统有如下情...

索隆
2013/04/15
0
1
mongoDB 之 GridFS简介(一)

前言 :GridFS从名字来看,就明白是一个文件系统,它是mongodb的一个子模块,使用GridFS可以基于mongodb来持久存储文件.并且支持分布式应用(文件分布存储和读取). 使用场景:如果你的系统有如下情...

一枚Sir
2014/06/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux的基本命令

目录的操作命令(增删改查) 增: mkdir 目录名称; 查: ls 可以看到该目录下的所有的目录和文件 ls -a,可以看到该目录下的所有文件和目录,包括隐藏的 ls -l,可以看到该目录下的所有目录和...

凹凸凸
今天
2
0
在古老unix中增加新用户

Installing 4.3 BSD Quasijarus on SIMH 目标:要在4.3BSD中新增加用户dmr,指定目录/home/dmr,uid为10 gid=31(guest组,系统已建立) 4.3BSD还没有adduser或useradd 直接修改/etc/passwd...

wangxuwei
今天
2
0
Bootstrap(六)表单样式

基本样式 所有设置了 .form-control 类的 <input>、<textarea> 和 <select> 元素都将被默认设置宽度属性为 width: 100%;。 将 label 元素和前面提到的控件包裹在 .form-group 中可以获得最好...

ZeroBit
昨天
3
0
SSL 证书格式转换

SSL 证书格式转换 不同服务器情况下,需要不同的证书格式。 比如 pem 转 pfx。 pem在window 平台下可以导入,但是无法正常使用。 需要转换成pfx。 推荐在线转换工具,由中国数字证书网站提供...

DrChenXX
昨天
2
0
HAProxy

xx

Canaan_
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部