mongodb学习之:GridFS
GridFS是一种在Mongodb中存储大二进制文件的机制。GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片、音频、视频等)。
使用GridFS有如下几个原因:
1 利用GridFS可以简化需求
2 GridFS会直接利用已建立的复制或分片机制,所以对于文件存储来说故障恢复和扩展都容易
3 GridFS可以避免用于存储用户上传内容的文件系统出现的某些问题。GridFS 会将大文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk将作为MongoDB的一个文档(document)被存储在chunks集合中。
4 GridFS不产生磁盘碎片。
下面来看下具体的使用方法:
GridFS最近的使用方法就是采用mongofiles的命令,mongofiles可以用来在GridFS中上传,下载,显示文件。
(1)新建一个test.txt文档
root@zhf-maple:/home/zhf# echo "hello mongod" > test.txt
root@zhf-maple:/home/zhf# cat test.txt
hello mongod
(2)通过mongofiles上传
root@zhf-maple:/home/zhf# mongofiles put test.txt
2017-12-31T22:06:26.489+0800 connected to: localhost
added file: test.txt
(3)显示文件
root@zhf-maple:/home/zhf# mongofiles list
2017-12-31T22:06:41.308+0800 connected to: localhost
test.txt 13
(4)在本端删除掉该文件
root@zhf-maple:/home/zhf# rm test.txt
root@zhf-maple:/home/zhf# cat test.txt
cat: test.txt: 没有那个文件或目录
(5)从GridFS下载文件。
root@zhf-maple:/home/zhf# mongofiles get test.txt
2017-12-31T22:07:43.762+0800 connected to: localhost
finished writing to test.txt
root@zhf-maple:/home/zhf# cat test,txt
cat: test,txt: 没有那个文件或目录
root@zhf-maple:/home/zhf# cat test.txt
hello mongod
那么GridFS具体是如何存储文件的呢。前面介绍到GridFS是为了解决单个document不能超过16M的问题而推出的。通过将文件进行切分存成一个单独的集合:fs.chunks,并保存一个文件索引表:fs.files。在前面的例子中我们上传了一个test.txt文件。我们进入数据库看下是如何存储的。
在数据库中多了test数据库
> show dbs
admin 0.000GB
local 0.000GB
maple 0.000GB
test 0.000GB
在test数据库下有fs.chunks和fs.files两个集合。
> use test
switched to db test
> show collections
fs.chunks
fs.files
在chunks中字段解释如下:
_id:文件唯一的id
files_id:包含这个块元数据的文件文档的_id
n:表示块编号。也就是这个块在原文件中的顺序编号。这里为0代表只有一个块
data:组成文件块的二进制数据
> db.fs.chunks.find()
{ "_id" : ObjectId("5a48eee22d33c14783a13d55"), "files_id" : ObjectId("5a48eee22d33c14783a13d54"), "n" : 0, "data" : BinData(0,"aGVsbG8gbW9uZ29kCg==") }
在files中的字段解释如下:
_id:文件中唯一的id
length:文件长度
chunksize:每块的大小。以字节为单位
uploadDate:文件存入GridFS的时间戳
md5:文件内容的md5校验和。由服务器端生成。
> db.fs.files.find()
{ "_id" : ObjectId("5a48eee22d33c14783a13d54"), "chunkSize" : 261120, "uploadDate" : ISODate("2017-12-31T14:06:27.294Z"), "length" : 13, "md5" : "40a1f080f26be5a4c8cef7d78f974659", "filename" : "test.txt" }
mongodb学习之:GridFS的更多相关文章
- MongoDB学习笔记(二)--Capped集合 && GridFS存储文件
Capped集合 Capped集合的大小是固定的,如果空间都被用完了,新添加的对象 ...
- MongoDB学习笔记—Linux下搭建MongoDB环境
1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...
- Mongodb学习笔记一(Mongodb环境配置)
Mongodb学习 说明: MongoDB由databases组成,database由collections组成,collection由documents组成,document由fileds组成.Mo ...
- mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)
最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...
- MongoDB学习笔记(三)--权限 && 导出导入备份恢复 && fsync和锁
权限 绑定内网I ...
- MongoDB学习笔记:快速入门
MongoDB学习笔记:快速入门 一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...
- MongoDB学习笔记系列
回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...
- MongoDB学习记录
一.操作符 "$lt" :"<""$lte" :"<=""$gt" :"> ...
- MongoDB学习笔记六:进阶指南
[数据库命令]『命令的工作原理』MongoDB中的命令其实是作为一种特殊类型的查询来实现的,这些查询针对$cmd集合来执行.runCommand仅仅是接受命令文档,执行等价查询,因此,> db. ...
- PHP操作MongoDB学习笔记
<?php/*** PHP操作MongoDB学习笔记*///*************************//** 连接MongoDB数据库 **////*************** ...
随机推荐
- 過充保護警告訊息 over charging protection,Battery over voltage protection, warning message
Definition: over charging protection.battery over voltage protection, 是一種 battery 保護機制, 避免 battery 充 ...
- C#实现键盘钩子
前言: 因为项目中需要使用到快捷键,所以上网找资料了解关于快捷键的实现技术,于是有了键盘钩子的使用学习.在网上了解到,键盘钩子其实只是很多种钩子中的其中一种.所谓钩子:请看下面关于钩子的描述(来自百度 ...
- POJ 2253 Frogger Floyd
原题链接:http://poj.org/problem?id=2253 Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissi ...
- SpringBoot系列之(一)helloworld!
要说什么最流行,现阶段肯定是Springboot和Springcloud,在Spring官方网站上第一个就是springboot,可见对springboot的重视程度.主要原因springboot集成 ...
- 7.【nuxt起步】-Nuxt与后端数据交互
接下来就是对接服务端接口,展示真实的数据 1.做了个虚拟接口地址:http://test.yms.cn/testjson.asp 输出数据: { "title": "单间 ...
- 老毛桃winpe优盘启动系统个性修改全攻略.(全)
博主从05年开始接触计算机,不能说是高手也算个老菜了,当时装系统还是用蕃茄花园的光盘安装系统,后来在学校管理机房,哪台电脑坏了就硬盘对拷. 时到今日,重启系统的方法五花八门,其中使用最广的莫过于PE优 ...
- 如何让你的服务屏蔽Shodan扫描
1. 前言 在互联网中,充斥着各种各样的网络设备,shodan等搜索引擎提供给了我们一个接口,让我们可以在输入一些过滤条件就可以检索出网络中相关的设备. 对于我们的一些可能有脆弱性或者比较隐私的服务, ...
- mycat安装和测试
mycat安装和测试 一. 环境准备 本机环境是三台centos6.5 IP 主机名 数据库名 安装软件 192.168.17.4 master db1 mycat,mysql 192.168.17 ...
- G - Specialized Four-Digit Numbers(1.5.2)
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit cid=1006#sta ...
- sql server 2008出现远程过程调用失败
sql server 2008出现远程过程调用失败解决方式有下面几种: 1.依照网上说的方法.是由于装了vs 2012或是vs2013或是vs2015等高版本号时.安装了Microsoft SQL ...