文档章节

mongoDB(4)——mongoDB数据库的结构及GridFS存储机制

h
 haidao1992
发布于 2017/05/06 15:39
字数 817
阅读 17
收藏 0

mongodb安装文件:https://pan.baidu.com/s/1i50wR4p

一)mongodb结构:

Collections:在mongoDB中叫做集合,是文档的集合。它是无模式的,可以存储各种各样的文档。

       和关系型数据库中的表相比,关系数据库的每一张表就是一个关系模型的映射,每张表的字段就是对应实体的属性和主外键的集合,每个字段需要提前定义。

       而集合中可以保存毫无关系的数据,而且具体要保存什么不需要提前定义。

  Document:文档是mongoDB保存数据的基本单元。数据的存储结构为BSON格式,也就是TextView中显示的文本。

       保存的数据类型可以为:null、boolean、String、object、32位整数、64位整数、64位浮点数、日期、正则表达式、js代码、二进制数据、数组、内嵌文档、最大值、最小值、未定义类型。

 GridFS:由于BSON对象有大小限制,不适合存储大型文件,GridFS文件系统为大型文件提供了存储方案(其存储原理稍后再讲)。fs中保存的是图片、视频等大文件。

二)GridFS存储机制:  

 MongoDB的文档以BSON格式存储,支持二进制数据类型,所以,可以把文件的二进制格式的数据直接保存到MongoDB的文档中,但是每个文档的长度是有限制的,而我们一般上传的图片、视频等文件又比较大。针对这种情况,mongoDB提供了一种处理大文件的规范——GridFS。

    一、实现原理:

     将要存储的文件分成若干块儿,每一块作为一个单独的文档来存储,每块默认大小为256k。用两个集合来存储一个文件:fs.files与fs.chunks。

      fs.files存放文件信息

      

     _id:唯一标识   length:文件总长度    chunksize:每块儿的大小,默认为256k      uploadDate:时间戳    md5:文件内容的md5校验和,值由服务器端生成,用于计算上传块的md5校验和,用户可以校验md5的值确保文件正确上传。 contentType:文件类型    还可以添加其他键来标识这个文件,例如,可以是上传者的信息。

      fs.chunks:存放文件的数据

      

       _id:唯一标识    files_id:文件集合中的_id    n:文件的第几个块儿   data:文件的二进制数据

 

      二、保存文件的流程

            如果文件大于chunksize,则把文件分割成多个chunk,再把这些chunk保存到fs.chunks中,最后再把文件信息存入到fs.files中。

     三、读取文件的流程

           先据查询的条件,在fs.files中找到对应的文档,得到“_id”的值,再据这个值到fs.chunks中查找所有“files_id”为“_id”的chunk,并按“n”排序,最后依次读取chunk中“data”对象的内容,还原成原来的文件。

     四、注意:

           GridFS在上传文件过程中是先把文件数据保存到fs.chunks,最后再把文件信息保存到fs.files中,所以如果在上传文件过程中失败,有可能在fs.chunks中出现垃圾数据。这些垃圾数据可以定期清理掉。

© 著作权归作者所有

h
粉丝 1
博文 26
码字总数 27021
作品 0
浦东
程序员
私信 提问
浅尝辄止MongoDB:GridFS

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

wzy0623
2018/09/29
0
0
MongoDB进阶系列(13)——GridFS大文件的添加、获取、查看、删除

GridFS是一种在MongoDB中存储大二进制文件的机制,使用GridFS的原因有以下几种: 存储巨大的文件,比如视频、高清图片等。 利用GridFS可以简化需求。 GridFS会直接利用已经建立的复制或分片机...

HappyBKs
2015/03/17
1K
0
MongoDB系列教程(八):GridFS存储详解

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

开元中国2015
2015/07/25
390
0
Java MongoDB : Save image example

Java MongoDB : Save image example In this tutorial, we show you how to save an image file into MongoDB, via GridFS API. The GridFS APIs are able to serve other binary files as w......

引鸩怼孑
2015/05/22
274
0
mongodb Gridfs操作

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

Airship
03/15
29
0

没有更多内容

加载失败,请刷新页面

加载更多

Guava 3: 集合Collections

正文 一、引子 Guava 对JDK集合的拓展,是最成熟且最受欢迎的部分。本文属于Guava的核心,需要仔细看。 二、Guava 集合 2.1 Immutable Collections不可变集合 1.作用 用不变的集合进行防御性...

孟飞阳
8分钟前
0
0
源码分析 RocketMQ DLedger 多副本存储实现

RocketMQ DLedger 的存储实现思路与 RocketMQ 的存储实现思路相似,本文就不再从源码角度详细剖析其实现,只是点出其实现关键点。我们不妨简单回顾一下 CommitLog 文件、ConsumeQueue 文件设...

中间件兴趣圈
13分钟前
1
0
vue入门--简单路由配置

本文转载于:专业的前端网站➜vue入门--简单路由配置   在初始化vue init webpack <工程名>时,有一步是询问是否安装vue-router,选择yes,如果没有安装的话,后面需要自己安装。然后在目录...

前端老手
43分钟前
5
0
怎么给视频配音

很多刚开始尝试视频制作的小伙伴,帮助到怎么给制作完成的视频配音,其实给视频配音的方法非常简单,在手机上可以进行制作,下面一起来看看给视频配音的方法吧! 具体步骤如下: 1、首先在手...

白米稀饭2019
52分钟前
4
0
windows批处理bat脚本编写

什么是bat脚本 .bat结尾的文件其实就是windows上的批处理脚本,Windows中的bat文件相当于 Linux中shell编程的.sh脚本,批量执行DOS命令。 其最简单的例子,是逐行书写在命令行中会用到的各种...

孙幼凌
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部