MongoDB使用GridFS存储大数据(Java)
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. 添加依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2. 配置 GridFsTemplate
在你的 Spring 配置中,你可以配置 GridFsTemplate bean。
@Configuration
public class GridFsConfig {@Beanpublic 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<InputStream> getFilesByName(String name) throws IOException {List<InputStream> inputStreams = new ArrayList<>();Query query = new Query(Criteria.where("filename").is(name));List<GridFSFile> 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)));
}
相关文章:
MongoDB使用GridFS存储大数据(Java)
MongoDB 是一个灵活的 NoSQL 数据库,能够存储大量的数据。但是,当涉及到特别大的数据项,比如大文件、视频或大型图片时,MongoDB 提供了一个特殊的方法来存储这些数据:GridFS。 简介: 1. 什么是 GridFS&am…...
内网穿透实战应用-windwos10系统搭建我的世界服务器,内网穿透实现联机游戏Minecraft
文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …...
pytorch基于ray和accelerate实现多GPU数据并行的模型加速训练
在pytorch的DDP原生代码使用的基础上,ray和accelerate两个库对于pytorch并行训练的代码使用做了更加友好的封装。 以下为极简的代码示例。 ray ray.py #codingutf-8 import os import sys import time import numpy as np import torch from torch import nn im…...
[蓝帽杯 2022 初赛]domainhacker
打开流量包,追踪TCP流,看到一串url编码 放到瑞士军刀里面解密 最下面这一串会觉得像base64编码 删掉前面两个字符就可以base64解码 依次类推,提取到第13个流,得到一串编码其中里面有密码 导出http对象 发现最后有个1.rar文件 不出…...
在 Pytorch 中使用 TensorBoard
机器学习的训练过程中会产生各类数据,包括 “标量scalar”、“图像image”、“统计图diagram”、“视频video”、“音频audio”、“文本text”、“嵌入Embedding” 等等。为了更好地追踪和分析这些数据,许多可视化工具应运而生,比如之前介绍的…...
Grafana Dashboard 备份方案
文章目录 Grafana Dashboard 备份方案引言工具简介支持的组件要求配置备份安装使用 pypi 安装grafana备份工具配置环境变量使用Grafana Backup Tool 进行备份恢复备份 Grafana Dashboard恢复 Grafana Dashboard结论Grafana Dashboard 备份方案 引言 每个使用 Grafana 的同学都…...
opencv-疲劳检测-眨眼检测
#导入工具包 from scipy.spatial import distance as dist from collections import OrderedDict import numpy as np import argparse import time import dlib import cv2FACIAL_LANDMARKS_68_IDXS OrderedDict([("mouth", (48, 68)),("right_eyebrow",…...
2023-08-24力扣每日一题
链接: 1267. 统计参与通信的服务器 题意: 同行同列可以发生通信,求能发生通信的机器数量 解: 标记每行/每列的机器个数即可 实际代码: #include<bits/stdc.h> using namespace std; class Solution { pub…...
蚂蚁数科持续发力PaaS领域,SOFAStack布局全栈软件供应链安全产品
8月18日,记者了解到,蚂蚁数科再度加码云原生PaaS领域,SOFAStack率先完成全栈软件供应链安全产品及解决方案的布局,包括静态代码扫描Pinpoint、软件成分分析SCA、交互式安全测试IAST、运行时防护RASP、安全洞察Appinsight等&#x…...
Java后端开发面试题——消息中间篇
RabbitMQ-如何保证消息不丢失 交换机持久化: Bean public DirectExchange simpleExchange(){// 三个参数:交换机名称、是否持久化、当没有queue与其绑定时是否自动删除 return new DirectExchange("simple.direct", true, false); }队列持久化…...
C++ Windows API IsDebuggerPresent的作用
IsDebuggerPresent 是 Windows API 中的一个函数,它用于检测当前运行的程序是否正在被调试。当程序被如 Visual Studio 这样的调试器附加时,此函数会返回 TRUE;否则,它会返回 FALSE。 这个函数经常被用在一些安全相关的场景或是防…...
【JVM 内存结构 | 程序计数器】
内存结构 前言简介程序计数器定义作用特点示例应用场景 主页传送门:📀 传送 前言 Java 虚拟机的内存空间由 堆、栈、方法区、程序计数器和本地方法栈五部分组成。 简介 JVM(Java Virtual Machine)内存结构包括以下几个部分&#…...
华为云Stack的学习(一)
一、华为云Stack架构 1.HCS 物理分散、逻辑统一、业务驱动、运管协同、业务感知 2.华为云Stack的特点 可靠性 包括整体可靠性、数据可靠性和单一设备可靠性。通过云平台的分布式架构,从整体系统上提高可靠性,降低系统对单设备可靠性的要求。 可用性…...
人类反馈强化学习RLHF;微软应用商店推出AI摘要功能
🦉 AI新闻 🚀 微软应用商店推出AI摘要功能,快速总结用户对App的评价 摘要:微软应用商店正式推出了AI摘要功能,该功能能够将数千条在线评论总结成一段精练的文字,为用户选择和下载新应用和游戏提供参考。该…...
day1:前端缓存问题
❝ 「目标」: 持续输出!每日分享关于web前端常见知识、面试题、性能优化、新技术等方面的内容。篇幅不会过长,方便理解和记忆。 ❞ ❝ 「主要面向群体:」前端开发工程师(初、中、高级)、应届、转行、培训等同学 ❞ Day…...
学习网络编程No.4【socket编程实战】
引言 北京时间:2023/8/19/23:01,耍了好几天,主要归咎于《我欲封天》这本小说,听了几个晚上之后逐渐入门,在闲暇时间又看了一下,小高潮直接来临,最终在三个昼夜下追完了,哈哈哈&…...
HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 四)
Observed装饰器和ObjectLink装饰器:嵌套类对象属性变化 上文所述的装饰器仅能观察到第一层的变化,但是在实际应用开发中,应用会根据开发需要,封装自己的数据模型。对于多层嵌套的情况,比如二维数组,或者数…...
arcgis--坐标系
1、arcgis中,投影坐标系的y坐标一定是7位数,X坐标有两种:6位和8位。 6位:省略带号,这是中央经线形式的投影坐标,一般投影坐标中会带CM字样;8位:包括带号,一般投影坐标中…...
LFS学习系列 第5章. 编译交叉工具链(1)
5.1 介绍 本章介绍如何构建交叉编译器及其相关工具。尽管这里的交叉编译是“伪造”、“假装”的,但其原理与真正的交叉工具链相同。 本章中编译的程序将安装在$LFS/tools目录下,以使它们与以下章节中安装的文件分离。而另一方面,库被安装到…...
网络互联与互联网 - TCP 协议详解
文章目录 1 概述2 TCP 传输控制协议2.1 报文格式2.2 三次握手,建立连接2.3 四次挥手,释放连接 3 扩展3.1 实验演示3.2 网工软考 1 概述 在 TCP/IP 协议簇 中有两个传输协议 TCP:Transmission Control Protocol,传输控制协议&…...
【USB3.0协议探秘】实战篇·三种复位事件的触发机制与链路状态变迁
1. 认识USB3.0的三种复位机制 刚接触USB3.0协议时,很多人会被各种复位类型绕晕。在实际开发中,我就遇到过因为混淆PowerOn Reset和Warm Reset导致设备无法正常初始化的情况。今天我们就来彻底搞懂这三种复位机制的区别和应用场景。 USB3.0协议定义了三种…...
信号处理避坑指南:ESPRIT、Root-Music等DOA估计算法,到底该怎么选?
DOA估计算法选型实战:ESPRIT与MUSIC家族的性能对决 当八通道均匀线阵捕捉到两个间隔仅5的远场信号时,算法A在信噪比15dB时成功分离目标,而算法B直到25dB才能勉强分辨——这种真实场景中的性能差异,正是工程师选择DOA(波…...
石榴石固态电解质表面再生:氧气处理与气氛控制的关键突破
1. 项目概述:破解石榴石固态电解质表面钝化的密码如果你正在研究或关注下一代高能量密度电池,那么对固态电解质(Solid Electrolyte, SE)一定不陌生。在众多候选者中,石榴石型固态电解质,特别是掺杂的LLZO&a…...
RDMA网络调试实战:当你的应用卡顿时,如何定位是哪种Error导致了重传?
RDMA网络性能调优实战:从重传Error定位到精准修复 RDMA(Remote Direct Memory Access)技术凭借其超低延迟和高吞吐量的特性,已经成为高性能计算、分布式存储和金融交易系统的核心网络架构。但在实际生产环境中,即使是经…...
Arm LUTI指令解析:向量化查找表优化实战
1. Arm LUTI指令深度解析:多寄存器查找表操作实战指南在Armv9架构的SME2扩展中,LUTI(Lookup Table Indexed)系列指令为向量化查找表操作提供了硬件级支持。这类指令通过ZT0寄存器存储查找表数据,利用源向量寄存器中的索…...
自定义下载器开发:如何为Fetch扩展OkHttp和其他下载引擎
自定义下载器开发:如何为Fetch扩展OkHttp和其他下载引擎 【免费下载链接】Fetch The best file downloader library for Android 项目地址: https://gitcode.com/gh_mirrors/fetch/Fetch Fetch作为Android平台上最优秀的文件下载库,其强大的扩展性…...
CircuitFusion:多模态AI在集成电路设计中的革命性应用
1. 集成电路设计的多模态革命:CircuitFusion技术解析在AI芯片设计领域,一个令人头疼的现实是:随着芯片复杂度呈指数级增长,传统设计流程已难以应对。以7nm工艺节点为例,单个芯片可能包含数十亿个晶体管,设计…...
从DDR到LPDDR:搞懂手机和电脑内存差异,看这一篇就够了(附选型避坑指南)
从DDR到LPDDR:全面解析移动与桌面内存的技术差异与选型策略 在智能设备性能爆发的时代,内存技术正经历着从"够用"到"极致优化"的转变。当工程师面对物联网终端需要0.5W超低功耗、游戏手机追求100GB/s带宽、自动驾驶系统要求纳秒级延…...
告别文献混乱!Mendeley保姆级入门指南:从安装、导入到Word引用,一篇搞定
Mendeley科研文献管理全流程实战:从零搭建高效学术工作流 刚踏入科研领域的研究生们,往往会被海量文献淹没——下载的PDF散落各处,引用格式五花八门,重复阅读相同文献却找不到重点。这种混乱不仅消耗时间,更会打断研究…...
NotebookLM赋能社科研究(从文献综述到理论建模的闭环实践)
更多请点击: https://intelliparadigm.com 第一章:NotebookLM赋能社科研究(从文献综述到理论建模的闭环实践) NotebookLM 是 Google 推出的面向研究者的 AI 原生笔记工具,其核心能力在于对用户上传的 PDF、TXT 等本地…...
