当前位置: 首页 > 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;传输控制协议&…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...