MongoDB 是一个灵活的 NoSQL 数据库,能够存储大量的数据。但是,当涉及到特别大的数据项,比如大文件、视频或大型图片时,MongoDB 提供了一个特殊的方法来存储这些数据:GridFS。
简介:
1. 什么是 GridFS?
GridFS 是 MongoDB 提供的一个规范和工具集,用于将大文件切分成多个较小的数据块并存储在 MongoDB 中。默认情况下,GridFS 将文件分成 255 KB 的数据块进行存储。
2. 如何工作?
当你使用 GridFS 存储文件时:
- 文件被切分成多个小块。
- 每个小块作为一个单独的文档存储在 chunks 集合中。
- 文件的元数据(如文件名、类型等)将被存储在 files 集合中。
3. 为什么使用 GridFS?
如果你有一个超过 BSON 文档大小限制(16MB)的文件或数据,那么 GridFS 是一个理想的解决方案。即使不超过这个限制,GridFS 也对于存储大量需要快速随机访问的数据非常有用。
5. 其他注意事项
-
性能:由于 GridFS 将大文件切分成较小的数据块,所以可以非常快速地访问文件的任意部分,而不需要加载整个文件。
-
扩展性:MongoDB 和 GridFS 设计得非常适合扩展,所以你可以轻松地在集群上存储和管理大量的大文件。
Java中使用
使用 Java 的 MongoTemplate 来与 MongoDB 交互。想和GridFS 交互,你可以使用 GridFsTemplate。
1. 添加依赖
org.springframework.boot spring-boot-starter-data-mongodb 2. 配置 GridFsTemplate
在你的 Spring 配置中,你可以配置 GridFsTemplate bean。
@Configuration public class GridFsConfig { @Bean public GridFsTemplate gridFsTemplate(MongoDatabaseFactory mongoDbFactory, MongoConverter mongoConverter) { return new GridFsTemplate(mongoDbFactory, mongoConverter); } }
3. 使用 GridFsTemplate 存储文件
你可以使用 GridFsTemplate 的 store 方法来存储文件。
@Autowired private GridFsTemplate gridFsTemplate; public String addGridFs(InputStream content, String filename){ ObjectId objectId = gridFsTemplate.store(content, filename); return objectId.toHexString(); }
4. 使用 GridFsTemplate 检索文件
为了从 GridFS 中检索文件,你可以使用 findOne 方法。
public InputStream getFile(String id) throws IOException { GridFSFile file = gridFsTemplate.findOne(new Query(Criteria.where("_id").is(id))); if (file != null) { GridFsResource resource = gridFsTemplate.getResource(file); return resource.getInputStream(); } return null; } //根据名称查询多个文件 public List
getFilesByName(String name) throws IOException { List inputStreams = new ArrayList<>(); Query query = new Query(Criteria.where("filename").is(name)); List files = gridFsTemplate.find(query).into(new ArrayList<>()); for (GridFSFile file : files) { GridFsResource resource = gridFsTemplate.getResource(file); InputStream inputStream = resource.getInputStream(); if (inputStream != null) { inputStreams.add(inputStream); } } return inputStreams; } 5. 删除 GridFS 中的文件
//根据名称 public void deleteFile(String filename) { gridFsTemplate.delete(new Query(Criteria.where("filename").is(filename))); } public void deleteFile(String id) { gridFsTemplate.delete(new Query(Criteria.where("_id").is(id))); }
-
猜你喜欢
- 12天前(零碳中国·绿色投资蓝皮书)中国"零碳"差旅之路暨"绿色低碳酒店"标准研究项目成果发布会召开
- 12天前(从“见世面”到“内在需要”:在海南,追问旅行的意义)从“见世面”到“内在需要”:在海南,追问旅行的意义
- 12天前(天气预报 华为)2025HDC华为天气上新系统级天气智能体,引领更智能的气象服务
- 12天前(“为人民绽放——国家艺术基金优秀剧目展演”在合肥开幕)“为人民绽放——国家艺术基金优秀剧目展演”在合肥开幕
- 12天前(花王伴你乐享五一好“趣”处)花王伴你乐享五一好“趣”处
- 12天前(澳涞坞是什么)从本土品牌到全球舞台:澳涞山庄获国际顶级产业资源加持
- 12天前(天津四季酒店开业时间)天津四季酒店邀你开启灿烂暑假
- 12天前(冬日生活还没安排?上抖音一键打包北方花式过冬精彩)冬日生活还没安排?上抖音一键打包北方花式过冬精彩
- 12天前(阿斯塔纳航空属于哪个联盟)阿斯塔纳航空荣获Skytrax世界航空公司大奖,将继续助力中哈交流往来
- 12天前(第三届“堡里有年味·回村过大年”民俗花灯会活动)第三届“堡里有年味·回村过大年”民俗花灯会活动
网友评论
- 搜索
- 最新文章
- (2020广州车展哈弗)你的猛龙 独一无二 哈弗猛龙广州车展闪耀登场
- (哈弗新能源suv2019款)智能科技颠覆出行体验 哈弗重塑新能源越野SUV价值认知
- (2021款全新哈弗h5自动四驱报价)新哈弗H5再赴保障之旅,无惧冰雪护航哈弗全民电四驱挑战赛
- (海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
- (visa jcb 日本)优惠面面俱到 JCB信用卡邀您畅玩日本冰雪季
- (第三届“堡里有年味·回村过大年”民俗花灯会活动)第三届“堡里有年味·回村过大年”民俗花灯会活动
- (展示非遗魅力 长安启源助力铜梁龙舞出征)展示非遗魅力 长安启源助力铜梁龙舞出征
- (阿斯塔纳航空公司)阿斯塔纳航空机队飞机数量增至50架
- (北京香港航班动态查询)香港快运航空北京大兴新航线今日首航
- (我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉)我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉
- 热门文章