【MongoDB学习笔记29】MongoDB的GridFS存储深入

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介:

GridFS的原理是将大文件分割为多个比较大的块,将每个块作为独立的文档进行存储。

(1)GridFS中的块会被存贮到专用的集合中,默认为fs.chunks;

(2)除了将文件的每一个块单独存储外,还需要将每个文件块的元信息放入一个文档存储,并将这些文档默认集中在fs.files集合中;

例如将foo.txt文档加入到数据库foo中:

1
2
3
4
5
[root@localhost ~] # echo "hello world" >foo.txt   
[root@localhost ~] # mongofiles -d foo put foo.txt    
connected to: 127.0.0.1    
added  file : { _id: ObjectId( '54b3d62983047a88669bc529' ), filename:  "foo.txt" , chunkSize: 261120, uploadDate: new Date(1421071914003), md5:  "6f5902ac237024bdd0c176cb93063dc4" , length: 12 }    
done !

查看相应的集合:

1
2
3
4
5
> show collections  
fs.chunks  
fs.files  
system.indexes  
>

查看这个文档:

1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~] # mongo foo   
MongoDB shell version: 2.6.6    
connecting to: foo    
> db.fs.chunks.findOne()    
{    
     "_id"  : ObjectId( "54b51dc15caeb0e1a8722e8d" ),    
     "files_id"  : ObjectId( "54b51dc0c3ab6ae7c08f6028" ),    
     "n"  : 0,    
     "data"  : BinData(0, "aGVsbG8gd29ybGQK" )    
}    
>

files_id:块所属文件的元信息;

n: 块在文件中的相对位置;

data:块所包含的二进制数据;

1
2
3
4
5
6
7
8
9
10
> db.fs.files.findOne()   
{    
     "_id"  : ObjectId( "54b51dc0c3ab6ae7c08f6028" ),    
     "filename"  "foo.txt" ,    
     "chunkSize"  : 261120,    
     "uploadDate"  : ISODate( "2015-01-13T13:29:37.525Z" ),    
     "md5"  "6f5902ac237024bdd0c176cb93063dc4" ,    
     "length"  : 12    
}    
>

_id:文件的唯一ID,跟文件的每个块中的files_id的值是一致的;

length:文件所包含的字节数;

chunkSize:组成文件的每个块的大小,单位是字节;

updateDate:文件被上传到GridFS的时间;

MD5:文件的MD5值,由服务器计算所得;




本文转自 bannerpei 51CTO博客,原文链接:http://blog.51cto.com/281816327/1603698,如需转载请自行联系原作者

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
7月前
|
存储 NoSQL 分布式数据库
Hbase+ES和MongoDB存储大数据的选用
Hbase+ES和MongoDB存储大数据的选用
231 0
|
5天前
|
存储 JSON NoSQL
MongoDB的文档存储格式BSON和JSON的区别
MongoDB的文档存储格式BSON和JSON的区别
|
3月前
|
存储 SQL NoSQL
第3期 MongoDB与SQL存储
第3期 MongoDB与SQL存储
57 0
|
4月前
|
存储 NoSQL MongoDB
MongoDB【部署 04】Windows系统实现MongoDB多磁盘存储
MongoDB【部署 04】Windows系统实现MongoDB多磁盘存储
196 0
|
12月前
|
NoSQL 算法 Linux
MongoDB学习笔记(五) 集群搭建之副本集
MongoDB学习笔记(五) 集群搭建之副本集
351 0
|
12月前
|
NoSQL Linux MongoDB
MongoDB学习笔记(四) 集群搭建之主从复制
MongoDB学习笔记(四) 集群搭建之主从复制
526 0
|
12月前
|
分布式计算 NoSQL MongoDB
MongoDB学习笔记(三) 聚合
MongoDB学习笔记(三) 聚合
98 0
|
12月前
|
JSON NoSQL 关系型数据库
MongoDB学习笔记(二) 增删改查
MongoDB学习笔记(二) 增删改查
145 0
|
12月前
|
NoSQL 数据可视化 Linux
MongoDB学习笔记(一) 安装配置
MongoDB学习笔记(一) 安装配置
895 0
|
存储 JSON 自然语言处理
Python3.7+Django2.0.4配合Mongodb打造高性能高扩展标签云存储方案
书接上回,之前有一篇文章提到了标签云系统的构建:[Python3.7+jieba(结巴分词)配合Wordcloud2.js来构造网站标签云(关键词集合)](https://v3u.cn/a_id_138),但是这篇只是浅显的说明了一下如何进行切词以及前端如何使用wordcloud2.js进行前端展示,本次主要讨论下标签分词切出来之后,如何进行存储。
Python3.7+Django2.0.4配合Mongodb打造高性能高扩展标签云存储方案