MongoDB系列教程(八):GridFS存储详解

MongoDB系列教程(八):GridFS存储详解

GridFS简介

mongoDB的文档以BSON格式存储,支持二进制的数据类型,当咱们把二进制格式的数据直接保存到mongoDB的文档中。可是当文件太大时,例如图片和视频等文件,每一个文档的长度是有限的,因而mongoDb会提供了一种处理大文件的规范--GridFS。

GridFS实现原理

在GridFS数据库中,默认使用fs.chunks 和fs.files来存储文件,其中fs.files集合存放文件的信息,fs.chunks存放文件的数据,一个fs.files集合中的一条记录内容以下,即一个file信息以下所示:

html

{   

"_id" : ObjectId("4f4608844f9b855c6c35e298"),       //惟一id,能够是用户自定义的类型  

"filename" : "CPU.txt",      //文件名  

"length" : 778,      //文件长度  

"chunkSize" : 262144,    //chunk的大小  

"uploadDate" : ISODate("2012-02-23T09:36:04.593Z"), //上传时间  

"md5" : "e2c789b036cfb3b848ae39a24e795ca6",      //文件的md5值  

"contentType" : "text/plain"     //文件的MIME类型  

"meta" : null    //文件的其它信息,默认是没有”meta”这个key,用户能够本身定义为任意BSON对象  

}


对应fs.chunks中的chunk(中文意思数据块),以下所示:

java

{   

"_id" : ObjectId("4f4608844f9b855c6c35e299"),    //chunk的id  

"files_id" : ObjectId("4f4608844f9b855c6c35e298"),  //文件的id,对应fs.files中的对象,至关于fs.files集合的外键  

"n" : 0,     //文件的第几个chunk块,若是文件大于chunksize的话,会被分割成多个chunk块  

"data" : BinData(0,"QGV...")     //文件的二进制数据,这里省略了具体内容  

}


默认大小是256k,因此把文件存入到GridFS过程当中,若是文件大于chunksize,则把文件分割多个chunk,再把这些chunk保存在fs.chunks中,最后再把文件信息存入fs.files中。

在读取文件的时候,先根据查询的条件,在fs.files中找到一个合适的记录,获得“_id”的值,再根据这个值到fs.funks中查找全部files_id 为 _id 的chunk,并按照“n”排序,最后依次读取chunk中的“data”对象的内容,还原成原来的文件。

注:

一、GridFS不自动处理md5相同的文件,对于md5相同的文件,若是想在GridFS中只有一个存储,要用户处理,md5值的计算由客户端完成。

二、由于GridFS在上传文件过程当中是先把文件数据保存到fs.chunks,最后再把文件的信息保存到fs.files中,因此若是上传文件过程当中失败,有可能在fs.chunks中出现垃圾数据,这些垃圾数据,能够按期清理掉。 

mysql

参考来源: 
MongoDB系列教程(八):GridFS存储详解
http://www.lai18.com/content/409594.htmlsql

延伸阅读

《MongoDB技术知识》系列技术文章整理收藏 
mongodb

1mongoDB入门须要了解的基本知识
数据库

2MongoDB入门教程(包含安装、经常使用命令、相关概念、使用技巧、常见操做等)
安全

3MongoDB入门教程之分片技术详解
数据结构

4MongoDB入门教程之经常使用的运维技术介绍
架构

5MongoDB入门教程之C#驱动操做实例
运维

6MongoDB入门教程之主从复制配置详解

7MongoDB入门教程之聚合和游标操做介绍

8MongoDB入门教程之细说MongoDB数据库的增删查改操做

9MongoDB入门教程之索引操做浅析

10MongoDB入门教程之Windows下的MongoDB数据库安装图解

11MongoDB查询字段没有建立索引致使的链接超时异常解案例分享

12MongoDB日志文件过大的解决方法

13MongoDB社区版和企业版的差异对照表

14MongoDB中文社区发起人带你学习mongoDB

15对MongoDB数据库性能瓶颈分析

16MongoDB 分页查询的方法及性能

17MongoDB分片存储的集群架构实现

18Mongodb批量删除gridfs文件实例

19Mongodb增长、移除Shard Server实例

20Mongodb增长、移除Arbiter节点实例

21CentOS系统下MongoDB安装及配置教程

22MongoDB修改、删除文档的域属性实例

23Python中的MongoDB基本操做:链接、查询实例

24MongoDB导出查询结果到文件例子

25MongoDB中建立索引须要注意的事项

26MongoDB中的一些坑(最好不要用)

27给MongoDB添加用户权限方法分享

28Linux系统下MongoDB的简单安装与基本操做

29MongoDB教程之基本管理命令

30MongoDB教程之聚合(count、distinct和group)

31MongoDB教程之索引介绍

32MongoDB教程之数据操做实例

33MongoDB教程之入门基础知识

34MongoDB教程之查询操做实例

35MongoDB系列教程(四):设置用户访问权限

36MongoDB系列教程(八):GridFS存储详解

37MongoDB数据库的特点和优势介绍

38MongoDB简介 MongoDB五大特点

39MongoDB系列教程(六):java操做mongodb实例

40MongoDB系列教程(七):MongoDb数据结构详解

41MongoDB系列教程(五):mongo语法和mysql语法对比学习

42MongoDB系列教程(二):MongoDB简介

43MongoDB系列教程(一):NoSQL起源

44MongoDB中的MapReduce简介

45MongoDB系列教程(三):Windows中下载和安装MongoDB

46浅谈MongoDB的备份方式

47MongoDB 经常使用命令总结

48MongoDB与MySQL的操做对比表及区别介绍

49MongoDB安全配置详解

50MongoDB中的bson介绍和使用实例

相关文章
相关标签/搜索