Mongodb GridFS——适合大小超过16MB的文件
一、概述
GridFS是基于mongodb存储引擎是实现的“分布式文件系统”,底层基于mongodb存储机制,和其他本地文件系统相比,它具备大数据存储的多个优点。GridFS适合存储超过16MB的大型文件,不过16M数据在当今互联网时代,已经不足为奇。我们可以使用GridFS构建大规模的“图片服务器”、“文档服务器”、“视频、音频”文件服务器,GridFS对于web应用,可以结合nginx插件“ningx-gridfs”能够简单的实现负载均衡等特性,非常便捷;可以简单认为GridFS是为web应用而生。个人认为,目前架构比较简单的NoSQL文件系统中GridFS是最优秀的。
GridFS并不是将单个文件直接存储为一个document,而是将文件分成多个parts或者说chunks,然后将每个chunk作为作为一个单独的document存储,然后将chunks有序保存。默认情况下,GridFS的chunk大小位255k。GridFS使用2个collections来存储这些文件,一个collection存储文件的chunks(实际文件数据),另一个则存储文件的metadata(用户自定义的属性,filename,content-type等)。
当用户查询GridFS中的文件时,客户端或者driver将会重新按序组装这些chunks。用户可以range查询文件,也可以获取文件的任意部分的信息,比如:跳过(skip)视频或者音频(任何文件)的中间部,实现“range access of single file”。
对于mongodb而言,每个document最大尺寸为16M,如果想存储一条数据(比如一个文件)超过16M,那么只能使用GridFS支持;GridFS可以支持单个文件尺寸达到数G,读取文件时可以分段读取。此外,GridFS可以从Mongodb的高性能、高可用特性中获益,比如我们可以在“replica set”或者“sharding”架构模式下使用GridFS。
二、使用场景
document的大小超过16M是使用GridFS的条件之一,因为mongodb普通的collection无法支持16M以上的document,我们不得不选择其他方案;在一些情况下,将这些大文件存储在GridFS中,比直接存储在本地文件系统中更加适合:
1)如果你的文件系统对每个目录下文件的个数有限制(或者太多,将会影响文件的打开速度等)。
2)如果你的文件数据,有分数据中心镜像保存(大数据情况,可用性保证)。
3)如果你希望访问一个超大的文件,而不希望将它全部加入内存,而是有“range access”的情况,即分段读取,那么GridFS天生就具备这种能力,你可以随意访问任意片段。
对于一个大文件,如果你希望原子性的更新它的全部内容,那么GridFS将不适合;比如同时更新一个文件的多个chunk,因为mongodb本身没有事务机制。
对于小于16M的文件,比如一些图片、CSS、js文件等,应该将它们直接存储在普通的collection中而非GridFS(bindata,参见org.bson.types.Binary),因为它们通常较小,GridFS无法发挥其优势。当然,你为了统一application的“文件系统”存储方式,也可以将这些小文件保存在GridFS中,性能也不会差的太多,为了提升性能,对这些小文件,可以在存储时手动设置它的chunkSize,避免文件被切分成多个chunks来提高性能。
参考:
http://shift-alt-ctrl.iteye.com/blog/2195646
https://www.quora.com/Is-it-okay-to-store-large-binary-files-in-MongoDB
Mongodb GridFS——适合大小超过16MB的文件的更多相关文章
- MongoDB GridFS 存储大文件
我们经常会遇到这样的场景:上传/下载文件. 有两种思路可以解决这个问题: (1)将文件存储在服务器的文件系统中: (2)将文件存储在数据库中. 如果我们选择(2),那么我们可以使用MongoDB Gr ...
- 如何安放你的大文件,MongoDB GridFS可以帮助你
1 简介 众所周知(你不知也当你知),MongoDB是以文档(Document)组织数据的.除了常用于存储Json数据,它也是可以存储普通文件的.我们可以把一些文件以BSOON的格式存入MongoDB ...
- Spring Boot使用MongoDB GridFS进行文件的操作
1. GridFS简介 GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频.视频等),但是它是存储在MonoDB的集合中. GridFS 会将文件对象分割成多个的ch ...
- MongoDB GridFS——本质上是将一个文件分割为大小为256KB的chunks 每个chunk里会放md5标识 取文件的时候会将这些chunks合并为一个整体返回
MongoDB GridFS GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频.视频等). GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中 ...
- mongodb Gridfs操作
GridFS 介绍 GridFS是MongoDB规范用于存储和检索大文件,如图片,音频文件,视频文件等.这是一种文件系统用来存储文件,但数据存储于MongoDB集合中.GridFS存储文件比其文档大小 ...
- MongoDb GridFS的使用
MongoDb GridFS 是MongoDB的文件存储方案,主要用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频等),对大文件有着更好的性能. 要在C#中使用GridFS,首先 ...
- MongoDB 聚合结果大小限制
The aggregate command can return either a cursor or store the results in a collection. When returnin ...
- MongoDB GridFS最佳应用概述
<MongoDB GridFS最佳应用概述> 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs GridFS是MongoDB数据库之上的一个简单 ...
- MongoDB GridFS(命令行+php操作)
一.GridFS是什么 & 为什么需要它 我们知道目前MongoDB的BSON文件最大只能是16M,也就是说单个文档最多只能存储16M的数据,那么如果需要MongoDB存储超过16M的大文件该 ...
随机推荐
- JavaScript世界万物诞生记
作者:manxisuo链接:https://zhuanlan.zhihu.com/p/22989691来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 一. 无中生有 起 ...
- maven打包自动配置数据库链接信息
pom.xml加入下面代码 <profiles> <profile> <id>dev</id> <activation> <activ ...
- 简单配置PonyDebugger
OS的Debug 系统在github上还是有不少. PonyDebugger是看上去比较牛气的一个.尝试一下 Logo PonyDebugger 可以监控网络 NetworkTrafficDebugg ...
- Android View 测量流程(Measure)完全解析
前言 上一篇文章,笔者主要讲述了DecorView以及ViewRootImpl相关的作用,这里回顾一下上一章所说的内容:DecorView是视图的顶级View,我们添加的布局文件是它的一个子布局,而V ...
- hough变换检测直线和圆
图像测量和机器视觉作业: 提取图像中的直线和点的位置坐标,将其按一定顺序编码存入一文本文件,并在原图像上叠加显示出来. 下午实验了一下: 程序环境:vs2013(活动平台为x64)+opencv3.1 ...
- nodejs 打印机打印 pos打印
https://www.npmjs.com/package/chn-escpos 安装window vsbuild 编译工具 npm install --global --production win ...
- 不错.net图片水印类
using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Draw ...
- Android 设计模式之单例模式
设计模式是前人在开发过程中总结的一些经验,我们在开发过程中依据实际的情况,套用合适的设计模式,能够使程序结构更加简单.利于程序的扩展和维护.但也不是没有使用设计模式的程序就不好.如简单的程序就不用了, ...
- kubernetes滚动更新
系列目录 简介 当kubernetes集群中的某个服务需要升级时,传统的做法是,先将要更新的服务下线,业务停止后再更新版本和配置,然后重新启动并提供服务.如果业务集群规模较大时,这个工作就变成了一个挑 ...
- 关于arr.map()问题
最近看map实现原理, Array.prototype._map = function(fn, context) { console.log(fn, context) var temp = []; i ...