当前位置: 首页 > news >正文

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 存储文件

你可以使用 GridFsTemplatestore 方法来存储文件。

@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 数据库&#xff0c;能够存储大量的数据。但是&#xff0c;当涉及到特别大的数据项&#xff0c;比如大文件、视频或大型图片时&#xff0c;MongoDB 提供了一个特殊的方法来存储这些数据&#xff1a;GridFS。 简介&#xff1a; 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原生代码使用的基础上&#xff0c;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

打开流量包&#xff0c;追踪TCP流&#xff0c;看到一串url编码 放到瑞士军刀里面解密 最下面这一串会觉得像base64编码 删掉前面两个字符就可以base64解码 依次类推&#xff0c;提取到第13个流&#xff0c;得到一串编码其中里面有密码 导出http对象 发现最后有个1.rar文件 不出…...

在 Pytorch 中使用 TensorBoard

机器学习的训练过程中会产生各类数据&#xff0c;包括 “标量scalar”、“图像image”、“统计图diagram”、“视频video”、“音频audio”、“文本text”、“嵌入Embedding” 等等。为了更好地追踪和分析这些数据&#xff0c;许多可视化工具应运而生&#xff0c;比如之前介绍的…...

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力扣每日一题

链接&#xff1a; 1267. 统计参与通信的服务器 题意&#xff1a; 同行同列可以发生通信&#xff0c;求能发生通信的机器数量 解&#xff1a; 标记每行/每列的机器个数即可 实际代码&#xff1a; #include<bits/stdc.h> using namespace std; class Solution { pub…...

蚂蚁数科持续发力PaaS领域,SOFAStack布局全栈软件供应链安全产品

8月18日&#xff0c;记者了解到&#xff0c;蚂蚁数科再度加码云原生PaaS领域&#xff0c;SOFAStack率先完成全栈软件供应链安全产品及解决方案的布局&#xff0c;包括静态代码扫描Pinpoint、软件成分分析SCA、交互式安全测试IAST、运行时防护RASP、安全洞察Appinsight等&#x…...

Java后端开发面试题——消息中间篇

RabbitMQ-如何保证消息不丢失 交换机持久化&#xff1a; Bean public DirectExchange simpleExchange(){// 三个参数&#xff1a;交换机名称、是否持久化、当没有queue与其绑定时是否自动删除 return new DirectExchange("simple.direct", true, false); }队列持久化…...

C++ Windows API IsDebuggerPresent的作用

IsDebuggerPresent 是 Windows API 中的一个函数&#xff0c;它用于检测当前运行的程序是否正在被调试。当程序被如 Visual Studio 这样的调试器附加时&#xff0c;此函数会返回 TRUE&#xff1b;否则&#xff0c;它会返回 FALSE。 这个函数经常被用在一些安全相关的场景或是防…...

【JVM 内存结构 | 程序计数器】

内存结构 前言简介程序计数器定义作用特点示例应用场景 主页传送门&#xff1a;&#x1f4c0; 传送 前言 Java 虚拟机的内存空间由 堆、栈、方法区、程序计数器和本地方法栈五部分组成。 简介 JVM&#xff08;Java Virtual Machine&#xff09;内存结构包括以下几个部分&#…...

华为云Stack的学习(一)

一、华为云Stack架构 1.HCS 物理分散、逻辑统一、业务驱动、运管协同、业务感知 2.华为云Stack的特点 可靠性 包括整体可靠性、数据可靠性和单一设备可靠性。通过云平台的分布式架构&#xff0c;从整体系统上提高可靠性&#xff0c;降低系统对单设备可靠性的要求。 可用性…...

人类反馈强化学习RLHF;微软应用商店推出AI摘要功能

&#x1f989; AI新闻 &#x1f680; 微软应用商店推出AI摘要功能&#xff0c;快速总结用户对App的评价 摘要&#xff1a;微软应用商店正式推出了AI摘要功能&#xff0c;该功能能够将数千条在线评论总结成一段精练的文字&#xff0c;为用户选择和下载新应用和游戏提供参考。该…...

day1:前端缓存问题

❝ 「目标」: 持续输出&#xff01;每日分享关于web前端常见知识、面试题、性能优化、新技术等方面的内容。篇幅不会过长&#xff0c;方便理解和记忆。 ❞ ❝ 「主要面向群体&#xff1a;」前端开发工程师&#xff08;初、中、高级&#xff09;、应届、转行、培训等同学 ❞ Day…...

学习网络编程No.4【socket编程实战】

引言 北京时间&#xff1a;2023/8/19/23:01&#xff0c;耍了好几天&#xff0c;主要归咎于《我欲封天》这本小说&#xff0c;听了几个晚上之后逐渐入门&#xff0c;在闲暇时间又看了一下&#xff0c;小高潮直接来临&#xff0c;最终在三个昼夜下追完了&#xff0c;哈哈哈&…...

HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 四)

Observed装饰器和ObjectLink装饰器&#xff1a;嵌套类对象属性变化 上文所述的装饰器仅能观察到第一层的变化&#xff0c;但是在实际应用开发中&#xff0c;应用会根据开发需要&#xff0c;封装自己的数据模型。对于多层嵌套的情况&#xff0c;比如二维数组&#xff0c;或者数…...

arcgis--坐标系

1、arcgis中&#xff0c;投影坐标系的y坐标一定是7位数&#xff0c;X坐标有两种&#xff1a;6位和8位。 6位&#xff1a;省略带号&#xff0c;这是中央经线形式的投影坐标&#xff0c;一般投影坐标中会带CM字样&#xff1b;8位&#xff1a;包括带号&#xff0c;一般投影坐标中…...

LFS学习系列 第5章. 编译交叉工具链(1)

5.1 介绍 本章介绍如何构建交叉编译器及其相关工具。尽管这里的交叉编译是“伪造”、“假装”的&#xff0c;但其原理与真正的交叉工具链相同。 本章中编译的程序将安装在$LFS/tools目录下&#xff0c;以使它们与以下章节中安装的文件分离。而另一方面&#xff0c;库被安装到…...

网络互联与互联网 - TCP 协议详解

文章目录 1 概述2 TCP 传输控制协议2.1 报文格式2.2 三次握手&#xff0c;建立连接2.3 四次挥手&#xff0c;释放连接 3 扩展3.1 实验演示3.2 网工软考 1 概述 在 TCP/IP 协议簇 中有两个传输协议 TCP&#xff1a;Transmission Control Protocol&#xff0c;传输控制协议&…...

开源在线图片设计器,支持PSD解析、AI抠图等,基于Puppeteer生成图片

Github 开源地址: palxiao/poster-design 项目速览 git clone https://github.com/palxiao/poster-design.git cd poster-design npm run prepared # 快捷安装依赖指令 npm run serve # 本地运行将同时运行前端界面与图片生成服务(3000与7001端口)&#xff0c;合成图片时…...

在Linux系统上安装和配置Redis数据库,无需公网IP即可实现远程连接的详细解析

文章目录 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一个固定tcp地址4.2 配置固定TCP地址4.3 使用固定的tcp地址连接 Redis作为一款高速缓存的key value键值对的数据库,在…...

跨平台图表:ChartDirector for .NET 7.1 Crack

什么是新的 ChartDirector for .NET 7.0 支持跨平台使用&#xff0c;但仅限于 .NET 6。这是因为在 .NET 7 中&#xff0c;Microsoft 停止了用于非 Windows 使用的 .NET 图形库 System.Drawing.Common。由于 ChartDirector for .NET 7.0 依赖于该库&#xff0c;因此它不再支持 .…...

【unity数据持久化】XML数据管理器知识点

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…...

Linux——Shell常用运算符

运算符说明举例-eq检测两个数是否相等&#xff0c;相等返回 true。[ $a -eq $b ] 返回 false。-ne检测两个数是否不相等&#xff0c;不相等返回 true。[ $a -ne $b ] 返回 true。-gt检测左边的数是否大于右边的&#xff0c;如果是&#xff0c;则返回 true。[ $a -gt $b ] 返回 …...

C++(4)C++内存管理和命名空间

内存管理 new/delete C语言 malloc free完成对堆内存的申请和释放。 C new delete 类 new&#xff1a;动态申请存储空间的运算符&#xff0c;返回值为申请空间的对应数据类型的地址 int *p new int(10); 申请了一个初始值为10的整型数据 int *p new int[10]; 申…...

一网打尽java注解-克隆-面向对象设计原则-设计模式

文章目录 注解内置注解元注解 对象克隆为什么要克隆&#xff1f;如何克隆浅克隆深克隆 Java设计模式什么是设计模式&#xff1f;为什么要学习设计模式&#xff1f; 建模语言类接口类之间的关系依赖关系关联关系聚合关系组合关系继承关系实现关系 面向对象设计原则单一职责开闭原…...

k8s-statefulset部署myql-Nodeport方式

目录 1、部署openebs&#xff08;Elastic Block Store&#xff09; 1.下载镜像&#xff08;针对k8s1.19&#xff09; 2.加载镜像&#xff08;所有节点包括master&#xff09; 3.下载yaml文件并部署 4.设置默认storageclass 2、编写相关yaml文件 1.编写secret 2.编写state…...

MySQL双主架构、主从架构

为什么要对数据库做优化&#xff1f; MySQL官方说法&#xff1a; 单表2000万数据就达到瓶颈了。所以为了保证查询效率&#xff0c;要让每张表的大小得到控制。 MySQL主主架构 主数据库都负责增删改查。 比如有1000W的数据&#xff0c;有两个主数据库&#xff0c;就将数据分流给…...

基于微信小程序的物流管理系统3txar

在此基础上&#xff0c;结合现有物流管理体系的特点&#xff0c;运用新技术&#xff0c;构建了以 springboot为基础的物流信息化管理体系。首先&#xff0c;以需求为依据&#xff0c;对目前传统物流管理基础业务进行了较为详尽的了解和分析。根据需求分析结果进行了系统的设计&…...

上海网站建设 网页做/seo公司系统

通过前期的诸多准备&#xff0c;现在终于要摩拳擦掌大干一番了啊&#xff01;磨刀不误砍柴工啊&#xff0c;通过那么辛苦的前期准备&#xff0c;可以见识一下LiveMigration的魅力了。想一想可以不间断服务就能迁移虚拟机&#xff0c;物理机宕机了虚拟机照样跑。哇&#xff01;这…...

wordpress分权限浏览器/seo工具优化软件

“现在大部分的矿池都是在用我们当初开源的那套代码&#xff0c;包括前10名里也有不少。所以这个决定是很好的。只是后来给我们自己创业造成了一些麻烦&#xff0c;过多的竞争对手&#xff08;笑&#xff09;。”文 | 黄雪姣 运营 | 盖遥 编辑 | Mandy王梦蝶出品 | Odaily星球…...

衡水哪里可以做网站/乐清网站建设

rsa 密钥生成 见 http://blog.andsky.com/js-rsa-use-openssl-make-public-pirvate-key/android 客户端用rsa 公钥加密后经 base64 编码发到 服务端&#xff0c;服务端使用私钥解密客户端代码import java.math.BigInteger;import java.security.KeyFactory;import java.securit…...

绍兴疫情最新消息今天封城/seo最强

我真的贪恋这时光。。。 没将这美好用上。 都说该找到个感兴趣&#xff0c;天天快乐的工作。可是多么的难找&#xff0c;真的找到了80%符合想象的&#xff0c;是不是要从1-2千块干起呢&#xff1f; 路漫漫&#xff0c;总感觉冥冥中有条路是给聪明人或是执着人留着的捷径&#x…...

长沙的网站制作公司/百度最新版app下载安装

绕过杀毒软件&#xff0c;有很多钟方法。此处介绍一种&#xff0c;编写python程序调用shellcode&#xff0c;并使用Pyinstaler将python程序编译为exe程序。 准备工作:(Windows XP环境下编译) 将Python程序编译为exe&#xff0c;须要Python主程序&#xff0c;pywin32库&#xf…...

哪个网站专门做灵异文/新产品宣传推广策划方案

360主机卫士 for Linux是专为CentOS、Ubuntu、Redhat等操作系统打造的安全辅静默工具&#xff0c;可以有效地保护服务器的安装&#xff0c;让网站处门无处可藏&#xff0c;兼容Apache、Nginx等系列的服务器环境。360主机卫士linux安装教程&#xff1a;1.1 必要环境1)curl (通过…...