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

深入探索 MongoDB GridFS:高效大文件存储与管理的全面指南

GridFS 是 MongoDB 的一个规范,用于存储和检索超过 BSON 文档大小限制(16MB)的文件。与传统的文件系统不同,GridFS 可以将一个大文件分割成多个小块,并存储在 MongoDB 的两个集合中:fs.filesfs.chunks。这种方式不仅解决了大文件存储问题,还能实现对文件内容的高效检索和管理。

基本语法和命令

安装 MongoDB 和 pymongo

首先,确保安装了 MongoDB 并且已经启动。然后使用以下命令安装 Python 的 pymongo 库:

pip install pymongo

GridFS 基本操作

  1. 导入必要的库
from pymongo import MongoClient
import gridfs
  1. 连接到 MongoDB 数据库
client = MongoClient('mongodb://localhost:27017/')
db = client['mydatabase']
  1. 创建 GridFS 实例
fs = gridfs.GridFS(db)
  1. 上传文件
with open('example.txt', 'rb') as file:fs.put(file, filename='example.txt')
  1. 下载文件
file_data = fs.get_last_version(filename='example.txt').read()
with open('downloaded_example.txt', 'wb') as file:file.write(file_data)
  1. 查找文件
file_info = fs.find_one({'filename': 'example.txt'})
if file_info:print("File found:", file_info.filename)
else:print("File not found")
  1. 删除文件
fs.delete(file_info._id)

示例代码

上传文件示例

from pymongo import MongoClient
import gridfs# 连接数据库
client = MongoClient('mongodb://localhost:27017/')
db = client['mydatabase']
fs = gridfs.GridFS(db)# 上传文件
with open('example.txt', 'rb') as file:fs.put(file, filename='example.txt')

下载文件示例

# 下载文件
file_data = fs.get_last_version(filename='example.txt').read()
with open('downloaded_example.txt', 'wb') as file:file.write(file_data)

查找和删除文件示例

# 查找文件
file_info = fs.find_one({'filename': 'example.txt'})
if file_info:print("File found:", file_info.filename)# 删除文件fs.delete(file_info._id)
else:print("File not found")

应用场景

GridFS 是 MongoDB 的一个用于存储和检索大文件的规范。它可以将一个大文件拆分成多个小块,存储在 MongoDB 集合中,并且提供了一套 API 用于文件的存储和读取。下

1. 大文件存储

说明:GridFS 适用于存储超过 BSON 限制(16 MB)的文件,比如视频、音频、图像等。它通过将大文件拆分成小块(默认每块 255 KB),并将这些块存储在 MongoDB 的 fs.chunks 集合中,同时在 fs.files 集合中存储文件的元数据。

示例代码

from pymongo import MongoClient
from gridfs import GridFSclient = MongoClient('mongodb://localhost:27017/')
db = client['mydatabase']
fs = GridFS(db)# 存储大文件
with open('large_video.mp4', 'rb') as file:fs.put(file, filename='large_video.mp4')print("大文件存储完成")
2. 文件版本控制

说明:GridFS 允许存储同名文件的多个版本,每个文件版本都会有一个版本号(version),可以通过版本号来管理和访问不同的文件版本。

示例代码

# 存储文件的不同版本
with open('document_v1.txt', 'rb') as file:fs.put(file, filename='document.txt', version=1)with open('document_v2.txt', 'rb') as file:fs.put(file, filename='document.txt', version=2)print("文件版本控制存储完成")# 读取特定版本的文件
file_v1 = fs.get_version('document.txt', version=1)
print(file_v1.read().decode('utf-8'))file_v2 = fs.get_version('document.txt', version=2)
print(file_v2.read().decode('utf-8'))
3. 分布式文件存储

说明:GridFS 与 MongoDB 的集群能力结合,适用于分布式系统中的文件存储需求。通过将文件存储在 MongoDB 集群中,GridFS 可以提供高可用性和水平扩展能力。

示例代码(假设已配置 MongoDB 集群):

# 连接到 MongoDB 集群
client = MongoClient('mongodb://cluster0-shard-00-00.mongodb.net:27017,cluster0-shard-00-01.mongodb.net:27017,cluster0-shard-00-02.mongodb.net:27017/?replicaSet=Cluster0-shard-0')
db = client['distributed_database']
fs = GridFS(db)# 存储文件到分布式数据库中
with open('distributed_file.txt', 'rb') as file:fs.put(file, filename='distributed_file.txt')print("分布式文件存储完成")
4. 跨平台文件共享

说明:通过将文件存储在 MongoDB 中,GridFS 实现了跨平台的文件共享和访问。任何支持 MongoDB 的平台都可以访问这些文件。

示例代码

# 存储文件
with open('shared_file.txt', 'rb') as file:fs.put(file, filename='shared_file.txt')print("文件存储完成,可以跨平台共享")# 从其他平台读取文件
client_other_platform = MongoClient('mongodb://localhost:27017/')
db_other_platform = client_other_platform['mydatabase']
fs_other_platform = GridFS(db_other_platform)shared_file = fs_other_platform.get_last_version('shared_file.txt')
print(shared_file.read().decode('utf-8'))

通过以上示例代码,可以看到 GridFS 的多种应用场景,包括大文件存储、文件版本控制、分布式文件存储以及跨平台文件共享。GridFS 提供了灵活的文件存储解决方案,适用于各种需求。

注意事项

1. 性能考虑

说明:尽管 GridFS 适合存储大文件,但在高性能应用中,读写性能和网络带宽是关键因素。特别是在高并发访问场景下,频繁的文件读写操作可能导致性能瓶颈。此外,网络带宽的限制也会影响大文件的传输速度。

示例场景

一个在线视频平台需要存储和流式传输大量高清视频文件。为了提高性能,可以使用如下策略:

  • 使用 CDN 加速文件传输。
  • 采用合适的文件块大小,以平衡传输性能和数据库查询效率。
  • 优化数据库连接池,以支持高并发访问。

示例代码

# 使用连接池优化数据库连接
from pymongo import MongoClient
from gridfs import GridFSclient = MongoClient('mongodb://localhost:27017/', maxPoolSize=50)
db = client['videoplatform']
fs = GridFS(db)# 存储大文件时设置合适的块大小
with open('high_quality_video.mp4', 'rb') as file:fs.put(file, filename='high_quality_video.mp4', chunkSize=1024*1024)  # 1MB 块大小print("高性能大文件存储完成")
2. 索引优化

说明:对 fs.filesfs.chunks 集合进行索引优化,可以显著提高文件检索和读取速度。常见的索引包括对文件名、上传时间、文件 ID 等字段建立索引。

示例场景

一个文档管理系统需要快速检索和访问存储在 GridFS 中的文档文件。可以通过建立索引来优化查询性能。

示例代码

# 创建索引以优化查询性能
db['fs.files'].create_index([('filename', 1)])
db['fs.files'].create_index([('uploadDate', 1)])
db['fs.chunks'].create_index([('files_id', 1), ('n', 1)])print("索引优化完成")# 快速检索文件
file = fs.find_one({'filename': 'important_document.pdf'})
print(file.read().decode('utf-8'))
3. 文件碎片化

说明:在 GridFS 中,大文件被拆分成多个小块存储。在删除文件时,需要确保所有相关的块都被正确删除,以免造成数据碎片和存储浪费。

示例场景

一个日志管理系统需要定期删除过期的日志文件,以释放存储空间。必须确保删除文件时,相关的所有块都被正确删除。

示例代码

# 删除过期日志文件及其所有块
file_to_delete = fs.find_one({'filename': 'old_log_file.log'})
if file_to_delete:fs.delete(file_to_delete._id)print("过期日志文件删除完成")
else:print("未找到文件")
4. 文件安全

说明:存储敏感文件时,需要考虑文件的加密和访问控制。可以在文件上传前进行加密,并在检索时进行解密。此外,可以结合 MongoDB 的权限控制,限制对文件的访问。

示例场景

一个医疗系统需要存储患者的医疗记录文件,这些文件需要加密存储,并且只有授权用户才能访问。

示例代码

from cryptography.fernet import Fernet
import base64# 生成密钥
key = Fernet.generate_key()
cipher_suite = Fernet(key)# 加密文件内容
with open('patient_record.pdf', 'rb') as file:encrypted_data = cipher_suite.encrypt(file.read())fs.put(encrypted_data, filename='patient_record.pdf', metadata={'encryption_key': base64.b64encode(key).decode('utf-8')})print("文件加密并存储完成")# 解密文件内容
file = fs.find_one({'filename': 'patient_record.pdf'})
if file:key = base64.b64decode(file.metadata['encryption_key'])cipher_suite = Fernet(key)decrypted_data = cipher_suite.decrypt(file.read())with open('decrypted_patient_record.pdf', 'wb') as decrypted_file:decrypted_file.write(decrypted_data)print("文件解密完成")

通过这些示例代码,可以看到在不同应用场景中,如何处理性能考虑、索引优化、文件碎片化以及文件安全问题。这样可以更好地利用 GridFS 的功能,并确保系统的高效和安全运行。

总结

MongoDB 的 GridFS 提供了一种在数据库中存储大文件的有效方法,解决了 BSON 文档大小限制的问题。通过将大文件分割成小块存储,GridFS 实现了高效的文件管理和检索能力。虽然在性能和管理上有一定挑战,但通过合理的优化和使用,GridFS 可以成为大文件存储和管理的有效解决方案。

使用 GridFS 需要注意性能优化和文件管理,适用于大文件存储、文件版本控制和分布式文件存储等应用场景。理解和掌握 GridFS 的基本操作和注意事项,可以有效提升 MongoDB 在实际项目中的应用价值。

相关文章:

深入探索 MongoDB GridFS:高效大文件存储与管理的全面指南

GridFS 是 MongoDB 的一个规范,用于存储和检索超过 BSON 文档大小限制(16MB)的文件。与传统的文件系统不同,GridFS 可以将一个大文件分割成多个小块,并存储在 MongoDB 的两个集合中:fs.files 和 fs.chunks。…...

基于CentOS Stream 9平台 安装/卸载 Redis7.0.15

已更正systemctl管理Redis服务问题 1. 官方下载地址 https://redis.io/downloads/#redis-downloads 1.1 下载或上传到/opt/coisini目录下: mkdir /opt/coisini cd /opt/coisini wget https://download.redis.io/releases/redis-7.0.15.tar.gz2. 解压 tar -zxvf re…...

激励-保健理论和公平理论

激励-保健理论 herzberg的激励-保健理论中,保健因素是context of a job,激励因素是content of a job。 context of a job是受组织控制的因素,比如工作条件,基本工资,公司政策等,个人无法支配。content of…...

深入探索 Spring Boot 自定义启动画面

目录 引言什么是 Spring Boot 启动画面Spring Boot 默认启动画面为什么要自定义启动画面如何自定义 Spring Boot 启动画面 修改配置文件使用 Banner 接口通过图片实现启动画面ASCII 艺术画的应用 进阶:基于环境变量的动态 Banner多模块项目中的启动画面Spring Boot…...

Redis实战—Redis分布式锁

本博客为个人学习笔记,学习网站与详细见:黑马程序员Redis入门到实战 P56 - P63 目录 分布式锁介绍 基于Redis的分布式锁 Redis锁代码实现 修改业务代码 分布式锁误删问题 分布式锁原子性问题 Lua脚本 编写脚本 代码优化 总结 分布式锁介绍…...

联想Y7000P 2023款拆机教程及升级内存教程

0.电脑参数介绍 联想Y7000P 2023电脑,笔者电脑CPU为i7-13700H,14核20线程;标配内存为三星的DDR5-5600MHz-8GB*2,由于电脑CPU限制,实际内存跑的频率为5200MHz; 2个内存插槽,2个固态硬盘插槽。每个内存插槽最…...

开发常用依赖

目录 代理对象 Swagger Web 单元测试 MybatisPlus Lombok Mysql SpringBoot Jdk SpringCloud 数据库驱动包 hutool工具 配置仓库 通用库 maven插件 nacos注册中心 OpenFeign Spring AMQP JSON转换器 Redis 邮箱验证 Redisson分布式锁 客户端 代理对象 &l…...

【区分vue2和vue3下的element UI Empty 空状态组件,分别详细介绍属性,事件,方法如何使用,并举例】

在 Element UI(为 Vue 2 设计)和 Element Plus(为 Vue 3 设计)中,Empty(空状态)组件通常用于在数据为空或没有内容时向用户展示一种占位提示。然而,需要注意的是,Element…...

【AI作曲】毁掉音乐?早该来了!一个网易音乐人对于 AI 大模型音乐创作的思辨

引言:AI在创造还是毁掉音乐? 正如当初 midjourney 和 StableDiffusion 在绘画圈掀起的风波一样,suno 和 各大音乐大模型的来临,其实早该来了。 AI 在毁掉绘画?或者毁掉音乐? 没错,但也错了。…...

RabbitMQ实践——最大长度队列

大纲 抛弃消息创建最大长度队列绑定实验 转存死信创建死信队列创建可重写Routing key的最大长度队列创建绑定关系实验 在一些业务场景中,我们只需要保存最近的若干条消息,这个时候我们就可以使用“最大长度队列”来满足这个需求。该队列在收到消息后&…...

【pytorch02】手写数字问题引入

1.数据集 现实生活中遇到的问题 车牌识别身份证号码识别快递单的识别 都会涉及到数字识别 MNIST(收集了很多人手写的0到9数字的图片) 每个数字拥有7000个图像train/test splitting:60k vs 10k 图片大小28 28 数据集划分成训练集和测试集合的意义…...

【查看显卡信息】——Ubuntu和windows

1、VMware虚拟机 VMware虚拟机上不能使用CUDA/CUDNN,也安装不了显卡驱动 查看显卡信息: lspci | grep -i vga 不会显示显卡信息,只会输出VMware SVGA II Adapter,表示这是一个虚拟机,无法安装和使用显卡驱动 使用上…...

在 RK3568 上构建 Android 11 模块:深入解析 m、mm、mmm 编译命令

目录 Android 编译系统概述编译命令简介 环境准备使用 m、mm、mmm 编译模块编译整个源码树编译单个模块编译指定目录下的模块 高级应用并行编译清理编译结果编译特定配置 在 Android 开发中,特别是在 RK3568 这样的高性能平台上,有效地编译和管理模块是确…...

实战|YOLOv10 自定义目标检测

引言 YOLOv10[1] 概述和使用自定义数据训练模型 概述 由清华大学的研究团队基于 Ultralytics Python 包研发的 YOLOv10,通过优化模型结构并去除非极大值抑制(NMS)环节,提出了一种创新的实时目标检测技术。这些改进不仅实现了行业领…...

TTS前端原理学习 chatgpt生成答案

第一篇文章学习 小绿鲸阅读器 通篇使用chatgpt生成答案 文章: https://arxiv.org/pdf/2012.15404 1. 文章概述 本文提出了一种基于Distilled BERT模型的统一普通话文本到语音前端模块。该模型通过预训练的中文BERT作为文本编码器,并采用多任务学习技术…...

AI“音乐创作”横行给音乐家带来哪些隐忧

​​​​​​​近日,200多名国际乐坛知名音乐人联署公开信,呼吁AI开发者、科技公司、平台和数字音乐服务商停止使用人工智能(AI)来侵犯并贬低人类艺术家的权利,具体诉求包括,停止使用AI侵犯及贬低人类艺术家的权利,要求…...

SolidityFoundry 安全审计测试 Delegatecall漏洞2

名称: Delegatecall漏洞2 https://github.com/XuHugo/solidityproject/tree/master/vulnerable-defi 描述: 我们已经了解了delegatecall 一个基础的漏洞——所有者操纵漏洞,这里就不再重复之前的基础知识了,不了解或者遗忘的可…...

【字符串 状态机动态规划】1320. 二指输入的的最小距离

本文涉及知识点 动态规划汇总 字符串 状态机动态规划 LeetCode1320. 二指输入的的最小距离 二指输入法定制键盘在 X-Y 平面上的布局如上图所示,其中每个大写英文字母都位于某个坐标处。 例如字母 A 位于坐标 (0,0),字母 B 位于坐标 (0,1)&#xff0…...

2024.06.23【读书笔记】丨生物信息学与功能基因组学(第十七章 人类基因组 第三部分)【AI测试版】

第三部分:人类基因组的深入分析与比较基因组学 摘要: 本部分基于2001年国际人类基因组测序联盟(IHGSC)发布的人类基因组测序及分析草图,从生物信息学角度深入讨论了人类基因组的结构特征和分析方法。同时,提及了塞莱拉公司(Celera Genomics)版本的人类基因组草图及其…...

外观模式(大话设计模式)C/C++版本

外观模式 C #include <iostream> using namespace std;class stock1 { public:void Sell(){cout << "股票1卖出" << endl;}void Buy(){cout << "股票1买入" << endl;} };class stock2 { public:void Sell(){cout << …...

PHP木马原文

攻击者留下的源码 <?php $ZimXb strre.v; $SkYID ba.se64._d.eco.de; $qetGk g.zuncomp.ress; ini_set(display_errors, 0); ini_set(log_errors, 0); /*** 13f382ef7053c327e26dff2a9c14affbd9e8296a ***/ error_reporting(0); eval($qetGk($SkYID($ZimXb(Q2WA…...

湖南(市场调研)源点咨询 新产品上市前市场机会调研与研究分析

湖南源点调研认为&#xff1a;无论是创业公司&#xff0c;还是在公司内部探索新的项目或者新的产品线等&#xff0c;首先都要做“市场机会分析与调研“&#xff0c;要真正思考并解答以下疑问&#xff1a; 我们的目标客户群体是谁&#xff0c;他们如何决策&#xff1f; 我们所…...

Vue82-组件内路由守卫

一、组件内路由守卫的定义 在一个组件里面去写路由守卫&#xff0c;而不是在路由配置文件index.js中去写。 此时&#xff0c;该路由守卫是改组件所独有的&#xff01; 只有通过路由规则进入的方式&#xff0c;才会调这两个函数&#xff0c;否则&#xff0c;若是只是用<Ab…...

使用ESP32和Flask框架实现温湿度数据监测系统

项目概述 在这个项目中&#xff0c;我们将使用ESP32微控制器读取温湿度传感器的数据&#xff0c;并将这些数据通过HTTP请求传输到基于Flask框架的服务器。Flask是一个轻量级的Python Web框架&#xff0c;非常适合快速开发和部署Web应用。通过这个项目&#xff0c;我们不仅可以了…...

为什么按照正确的顺序就能开始不断地解决问题,按照不正确的顺序,问题就没有办法能够得到解决呢?

按照正确的顺序解决问题与按照不正确的顺序可能导致问题无法解决&#xff0c;这背后有几个关键原因&#xff1a; 1. **逻辑性**&#xff1a; 正确的顺序通常遵循逻辑性和因果关系&#xff08;因为得按照这个基础的逻辑性才能够是自己顺应规律&#xff0c;太阳没有办法能够从西…...

嵌入式Linux gcc 编译器使用解析

目录 1.说明 2.分步编译法 3.编译源文件的四个阶段 4.gdb调试及常用命令 5.Makefile 1.说明 源文件 main.c 想生成 source gcc –g –O2 main.c –o source 黄色部分便是控制字 -g用于GDB –O2用于优化编译; 绿色部分表示源,可以由多个组成,用空格隔开; gcc …...

4、matlab双目相机标定实验

1、双目相机标定原理及流程 双目相机标定是将双目相机系统的内外参数计算出来&#xff0c;从而实现双目视觉中的立体测量和深度感知。标定的目的是确定各个摄像头的内部参数&#xff08;如焦距、主点、畸变等&#xff09;和外部参数&#xff08;如相机位置、朝向等&#xff09…...

Oracle 数据库表和视图 的操作

1. 命令方式操作数据库&#xff08;采用SQL*Plus&#xff09; 1.1 创建表 1.1.1 基本语法格式 CREATE TABLE[<用户方案名>]<表名> (<列名1> <数据类型> [DEFAULT <默认值>] [<列约束>]<列名2> <数据类型> [DEFAULT <默认…...

美国ARC与延锋安全合作,推动汽车安全气囊技术新突破

在汽车安全领域&#xff0c;安全气囊作为关键被动安全配置&#xff0c;对于保障乘客生命安全至关重要。随着汽车工业的快速发展和科技创新的持续推进&#xff0c;安全气囊技术的升级与革新显得尤为重要。2022年10月25日&#xff0c;美国ARC公司与延锋安全携手合作&#xff0c;共…...

Docker:centos79-docker-compose安装记录

1.安装环境&#xff1a;centos7.9 x86 2.安装最新版&#xff1a; [rootlocalhost ~]# curl -fsSL get.docker.com -o get-docker.sh [rootlocalhost ~]# sh get-docker.sh # Executing docker install script, commit: e5543d473431b782227f8908005543bb4389b8desh -c yum in…...

相交链表(Leetcode)

题目分析&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 相交链表&#xff1a;首先我想到的第一个思路是&#xff1a;如图可知&#xff0c;A和B链表存在长度差&#xff0c;从左边一起遍历链表不好找交点&#xff0c;那我们就从后面开始找&#xff0c;但是这是单链表&…...

建造者模式(大话设计模式)C/C++版本

建造者模式 C 参考&#xff1a;https://www.cnblogs.com/Galesaur-wcy/p/15907863.html #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std;// Product Class&#xff0c;产品类&#xff0c;由多个…...

【地质灾害监测实现有效预警,44人提前安全转移】

6月13日14时&#xff0c;国信华源地质灾害监测预警系统提前精准预警&#xff0c;安全转移10户44人。 该滑坡隐患点通过科学部署国信华源裂缝计、倾角加速度计、雨量计、预警广播等自动化、智能化监测预警设备&#xff0c;实现了对隐患点裂缝、位移、降雨量等关键要素的实时动态…...

Ruby 数据库访问 - DBI 教程

Ruby 数据库访问 - DBI 教程 本文将详细介绍如何使用 Ruby 的 DBI(Database Interface)库来访问和操作数据库。DBI 是 Ruby 语言中一个常用的数据库接口库,它提供了一套统一的接口来访问不同的数据库系统,如 MySQL、PostgreSQL、SQLite 等。通过本文的学习,您将掌握如何使…...

Linux环境搭建之CentOS7(包含静态IP配置)

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;虚拟机 &#x1f320; 首发时间&#xff1a;2024年6月22日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; 安装VMw…...

Dell戴尔灵越Inspiron 16 Plus 7640/7630笔记本电脑原装Windows11下载,恢复出厂开箱状态预装OEM系统

灵越16P-7630系统包: 链接&#xff1a;https://pan.baidu.com/s/1Rve5_PF1VO8kAKnAQwP22g?pwdjyqq 提取码&#xff1a;jyqq 灵越16P-7640系统包: 链接&#xff1a;https://pan.baidu.com/s/1B8LeIEKM8IF1xbpMVjy3qg?pwdy9qj 提取码&#xff1a;y9qj 戴尔原装WIN11系…...

.NET C# 装箱与拆箱

.NET C# 装箱与拆箱 目录 .NET C# 装箱与拆箱1 装箱 (Boxing)1.1 过程&#xff1a;1.2 示例&#xff1a; 2 拆箱 (Unboxing)2.1 过程&#xff1a;2.2 示例&#xff1a; 3 性能影响4 性能优化4.1 使用泛型集合示例&#xff1a; 4.2 使用Nullable<T>示例&#xff1a; 4.3 避…...

springboot与flowable(9):候选人组

act_id_xxx相关表存储了所有用户和组的数据。 一、维护用户信息 Autowiredprivate IdentityService identityService;/*** 维护用户*/Testvoid createUser() {User user identityService.newUser("zhangsan");user.setEmail("zhangsanqq.com");user.setF…...

为什么要选择华为 HCIE-Security 课程?

2020 年我国网络安全市场规模达到 680 亿元&#xff0c;同比增长 25%。随着对网络安全的愈加重视及布局&#xff0c;市场规模将持续扩大。 近年来&#xff0c;随着“云大物工移智”等新兴技术的快速发展和普及应用&#xff0c;数字化已经融入社会经济生活的方方面面&#xff0c…...

C++之std::queue::emplace

std::queue::emplace 是 C STL 中 std::queue 容器的成员函数&#xff0c;它用于在队列的末尾就地构造一个新元素。这个函数类似于 std::queue::push&#xff0c;但是 emplace 允许你通过传递参数来构造元素&#xff0c;而不需要显式地创建一个元素对象。 理解 std::queue::em…...

Vue3 - 在项目中使用vue-i18n不生效的问题

检查和配置 Vue I18n 确保你已经正确安装了Vue I18n并且配置了组合API模式。 安装 Vue I18n npm install vue-i18nnext配置 i18n.js import { createI18n } from vue-i18n; import messages from ./messages;const i18n createI18n({legacy: false, // 使用组合 API 模式l…...

Day 44 Ansible自动化运维

Ansible自动化运维 几种常用运维工具比较 ​ Puppet ​ —基于 Ruby 开发,采用 C/S 架构,扩展性强,基于 SSL,远程命令执行相对较弱ruby ​ SaltStack ​ —基于 Python 开发,采用 C/S 架构,相对 puppet 更轻量级,配置语法使用 YAML,使得配置脚本更简单 ​ Ansible ​ —基于 …...

Excel/WPS《超级处理器》功能介绍与安装下载

超级处理器是基于Excel或WPS开发的一款插件&#xff0c;拥有近300个功能&#xff0c;非常简单高效的处理表格数据&#xff0c;安装即可使用。 点击此处&#xff1a;超i处理器安装下载 Excel菜单&#xff0c;显示如下图所示&#xff1a; WPS菜单显示&#xff0c;如下图所示&am…...

U-Net for Image Segmentation

1.Unet for Image Segmentation 笔记来源&#xff1a;使用Pytorch搭建U-Net网络并基于DRIVE数据集训练(语义分割) 1.1 DoubleConv (Conv2dBatchNorm2dReLU) import torch import torch.nn as nn import torch.nn.functional as F# nn.Sequential 按照类定义的顺序去执行模型&…...

POI导入带有合并单元格的excel,demo实例,直接可以运行

直接可以运行 import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.s…...

【C语言】解决C语言报错:Use-After-Free

文章目录 简介什么是Use-After-FreeUse-After-Free的常见原因如何检测和调试Use-After-Free解决Use-After-Free的最佳实践详细实例解析示例1&#xff1a;释放内存后未将指针置为NULL示例2&#xff1a;多次释放同一指针示例3&#xff1a;全局或静态指针被释放后继续使用示例4&am…...

C语言经典例题-19

1.字符串左旋结果 题目内容&#xff1a;写一个函数&#xff0c;判断一个字符串是否为另外一个字符串旋转之后的字符串。 例&#xff1a;给定s1 AABCD和s2 BCDAA,返回1 给定s1 abcd和s2 ACBD,返回0 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA AABCD右旋一…...

AlmaLinux 更换CN镜像地址

官方镜像列表 官方列表&#xff1a;https://mirrors.almalinux.org/CN 开头的站点&#xff0c;不同区域查询即可 一键更改镜像地址脚本 以下是更改从默认更改到阿里云地址 cat <<EOF>>/AlmaLinux_Update_repo.sh #!/bin/bash # -*- coding: utf-8 -*- # Author:…...

【笔记】【矩阵的二分】668. 乘法表中第k小的数

力扣链接&#xff1a;题目 参考地址&#xff1a;参考 思路&#xff1a;二分查找 把矩阵想象成一维的已排好序的数组&#xff0c;用二分法找第k小的数字。 假设m行n列&#xff0c;则对应一维下标范围是从1到mn&#xff0c;初始&#xff1a; l1; rmn; mid(lr)/2 设mid在第i行&a…...

红米手机RedNot11无法使用谷歌框架,打开游戏闪退的问题,红米手机如何开启谷歌框架

红米手机RedNot11无法使用谷歌框架&#xff0c;打开游戏闪退的问题&#xff0c; 1.问题描述2.问题原因3.解决方案3.1配置谷歌框架&#xff1a;3.1软件优化 4.附图 1.问题描述 红米手机打开安卓APP没有广告&#xff0c;直接闪退&#xff0c;无法使用谷歌框架 异常关键词中包含&…...