MinIO详解

说白了就是存储器,现在有云存储和本地存储、单机存储和分布式存储、大数据存储等等说到底数据存储、管理和调用。当然不同存储方式考虑和侧重的东西会有所不同的。

MinIO 是一个高性能的对象存储系统,设计用于处理大规模数据的存储和管理需求。它与亚马逊的S3兼容,并且可以部署在各种环境中,包括私有云和公有云。以下是MinIO的详细介绍:

1. MinIO的基本概念

MinIO 是一个高性能的分布式对象存储服务器,使用Go语言编写。它支持Amazon S3协议,提供了一种简单、快速、可扩展的对象存储解决方案。

2. MinIO的主要特性

  • 高性能:MinIO是为高性能而设计的,能够提供高达数百万个小对象和数百TB的大对象存储性能。
  • S3兼容:完全兼容Amazon S3 API,这意味着可以使用现有的S3客户端工具和库来与MinIO交互。
  • 简易安装和管理:提供简单的安装和配置步骤,并支持Web界面管理。
  • 扩展性:可以通过水平扩展增加存储容量,适应大规模数据存储需求。
  • 安全性:支持加密存储和传输,提供全面的数据保护机制。
  • 多租户支持:能够在同一部署中支持多个租户,每个租户可以有独立的存储空间和访问权限。

3. MinIO的部署模式

  • 单节点模式:适合测试和开发环境,安装和配置简单。
  • 分布式模式:适合生产环境,可以通过集群方式部署,提供高可用性和容错能力。

4. MinIO的核心组件

  • MinIO Server:核心组件,负责处理数据存储和管理请求。
  • MinIO Client (mc):命令行工具,提供了一组命令来管理MinIO服务器。
  • MinIO Console:Web管理界面,用于可视化管理和监控MinIO集群。

5. MinIO的典型使用场景

  • 云原生应用:适用于需要高性能存储和大规模数据管理的云原生应用。
  • 数据湖:用于存储和管理来自不同数据源的大量数据。
  • 机器学习和大数据分析:为数据科学和分析工作负载提供高效的数据存储解决方案。
  • 备份和恢复:作为企业数据备份和恢复的存储后端。

6. MinIO的安装和配置

以下是一个简单的安装和配置示例:

安装MinIO Server
# 下载MinIO server
wget https://dl.min.io/server/minio/release/linux-amd64/minio# 添加执行权限
chmod +x minio# 启动MinIO server
./minio server /data
配置MinIO Client
# 下载MinIO client
wget https://dl.min.io/client/mc/release/linux-amd64/mc# 添加执行权限
chmod +x mc# 配置MinIO client
./mc alias set myminio http://127.0.0.1:9000 minioadmin minioadmin

7. MinIO的安全配置

  • 访问控制:通过Access Key和Secret Key进行访问控制。
  • 加密:支持服务器端加密和客户端加密,确保数据在存储和传输过程中的安全性。
  • 审计日志:记录所有操作日志,以便进行安全审计和合规性检查。

8.SpringBoot+MinIO 

使用Spring Boot与MinIO进行常见操作需要结合Spring Boot的依赖注入和配置管理功能,同时利用MinIO的Java客户端库来实现对象存储的操作。下面是一个详细的步骤指南,包括依赖添加、配置、以及常见操作(如文件上传、下载、删除等)。

1. 添加依赖

在你的Spring Boot项目的pom.xml文件中添加MinIO的Java客户端库依赖:

<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.4.3</version>
</dependency>
2. 配置MinIO

application.propertiesapplication.yml文件中配置MinIO的相关信息:

minio.url=http://localhost:9000
minio.access-key=minioadmin
minio.secret-key=minioadmin
minio.bucket-name=mybucket
3. 创建MinIO配置类

创建一个配置类来初始化MinIO客户端:

import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MinioConfig {@Value("${minio.url}")private String minioUrl;@Value("${minio.access-key}")private String accessKey;@Value("${minio.secret-key}")private String secretKey;@Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(minioUrl).credentials(accessKey, secretKey).build();}
}
4. 创建MinIO服务类

创建一个服务类来封装MinIO的常见操作,如文件上传、下载、删除等:

import io.minio.MinioClient;
import io.minio.errors.MinioException;
import io.minio.messages.Bucket;
import io.minio.messages.Item;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.InputStream;
import java.util.List;@Service
public class MinioService {@Autowiredprivate MinioClient minioClient;@Value("${minio.bucket-name}")private String bucketName;// 创建存储桶public void createBucket() throws Exception {boolean found = minioClient.bucketExists(bucketName);if (!found) {minioClient.makeBucket(bucketName);}}// 文件上传public void uploadFile(MultipartFile file, String objectName) throws Exception {InputStream inputStream = file.getInputStream();minioClient.putObject(bucketName, objectName, inputStream, file.getContentType());inputStream.close();}// 文件下载public InputStream downloadFile(String objectName) throws Exception {return minioClient.getObject(bucketName, objectName);}// 文件删除public void deleteFile(String objectName) throws Exception {minioClient.removeObject(bucketName, objectName);}// 列出存储桶中的所有对象public Iterable<Result<Item>> listObjects() {return minioClient.listObjects(bucketName);}
}

9.若依框架集成MinIO插件 

插件集成 | RuoYi

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/841461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MinIO学习】

OSS Docker podman MinIO服务器 MinIO客户端 Bucket Object 时间同步 The difference between the request time and the servers time is too large。 URL

ISCC2024个人挑战赛WP-MISC

&#xff08;非官方解&#xff0c;以下内容均互联网收集的信息和个人思路&#xff0c;仅供学习参考&#xff09; where is flag 下载附件&#xff0c;解压出pyc&#xff0c;然后到下面网址反编译 python反编译 - 在线工具 记住c&#xff0c;是密文&#xff0c; Key是 k5fg…

决定新泽西州版图的关键历史事件

决定新泽西州版图的关键历史事件 1. *民地建立&#xff1a;1664年&#xff0c;新泽西成为英国*民地。该地区原为荷兰*民地的一部分&#xff0c;但同年根据英王查理二世的赐予&#xff0c;转归给了他的兄弟约克公爵&#xff08;后来的詹姆士二世&#xff09;&#xff0c;之后又被…

【计网】广播域和冲突域

一、相关概念 1.各层次设备 2.冲突域 2.1定义 冲突域通俗来讲就是在同一个网络中&#xff0c;两台设备同时传输的话会产生冲突。位于OSI的第一层&#xff1a;物理层 例如在集线器场景下&#xff0c;集线器属于物理层设备&#xff0c;它不具备交换机的功能&#xff0c;当收到节…

两种盒模型

在CSS中&#xff0c;有两种主要的盒模型&#xff08;Box Model&#xff09;&#xff0c;它们决定了元素的尺寸计算方式&#xff1a; 标准盒模型&#xff08;W3C Box Model&#xff09; 在标准盒模型中&#xff0c;元素的总宽度和总高度分别由以下几个部分组成&#xff1a; Cont…

mysql之递归sql

mysql之递归sql 递归sql在一些公司是不允许使用的&#xff0c;会涉及数据库压力&#xff0c;所以会在代码里递归查询&#xff0c;但有些公司开发流程没有规定&#xff0c;且数据库数据量不大&#xff0c;之前写过好几遍了&#xff0c;老是记不住&#xff0c;记录一下 通过父级…

Thrift快速入门开发demo

Thrift快速入门开发demo 一、认识Thrift thrift是什么?一个RPC 代码生成框架,使用它的IDL(Interface Defination Language,接口定义语言)定义你想要实现的接口,然后它就会生成对应语言的远程调用框架代码,用户只需要实现接口逻辑,不用关心具体的细节。 tutorial:htt…

特征变换,分箱

特征变换 分箱 为什么分箱 连续数值离散化 降低异常值带来的影响 提升模型的稳定性 如何分箱 等频 等距 卡方 风控场景下常用 决策树 …

牛客网刷题 | BC94 反向输出一个四位数

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 将一个四位数&…

【Linux初探】:解锁开源世界的神秘钥匙

文章目录 &#x1f680;一、了解Linux&#x1f525;二、Linux 的发行版❤️三、Linux应用领域&#x1f4a5;四、Linux vs Windows & mac &#x1f680;一、了解Linux Linux是一种自由、开放源代码的操作系统&#xff0c;它的内核由芬兰计算机科学家Linus Torvalds在1991年创…

LeetCode题练习与总结:二叉树的层序遍历Ⅱ--107

一、题目描述 给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向右遍历&#xff09; 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[…

【评价类模型】层次分析法(AHP)

1.评价类思想综述&#xff1a; 明确评价主体–>评价指标确定–>计算指标权重–>方案评价 1.1指标确定&#xff1a; 可以通过一个思维导图的方式来画出一个指标系统&#xff0c;先确定方向&#xff0c;再向下细化 注意&#xff1a;指标需要具有贴合性和独立性。 贴合…

如何搭建一个API

搭建一个API&#xff08;应用程序编程接口&#xff09;通常涉及以下几个步骤&#xff1a; 1. 确定API的目的和需求 明确你希望通过API实现的功能和目标。确定API将提供哪些数据和服务。 2. 设计API 定义端点&#xff08;Endpoints&#xff09;&#xff1a;确定API的URL结构…

破解:既要及即时相应,又要并行运行后台任务? FastAPI + asyncio

开发响应迅速且高效的Web应用程序是开发者的首要目标之一。一个常见的需求是&#xff0c;当触发一个端点时能够并行执行多个任务&#xff0c;但在第一个任务完成后立即返回响应&#xff0c;同时其余任务继续在后台运行。 挑战 假设在触发一个端点时&#xff0c;你有三个耗时任…

打造游戏APP:面向对象编程的实战演练

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、项目背景与架构概览 二、类的设计与实现 三、面向对象编程的实践 四、游戏循环与事件…

Vue CLI 的服务介绍与使用(2024-05-20)

1、介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统&#xff0c;提供&#xff1a; 通过 vue/cli 实现的交互式的项目脚手架。 通过 vue/cli vue/cli-service-global 实现的零配置原型开发。 一个运行时依赖 (vue/cli-service)&#xff0c;该依赖&#xff1a; 可升级…

详解混合A*算法Hybrid A*

混合A算法(Hybrid A)是一种改进的路径规划算法,特别针对车辆动力学进行了优化。以下是对混合A*算法的详细解释: 一、算法背景 混合A算法是在A算法的基础上发展而来的,旨在解决A算法在高维连续空间中的效率问题以及运动约束的问题。A算法虽然广泛应用于图或者网络中的路径…

linux中系统调用的原理

Linux中系统调用的原理涉及到用户态和内核态之间的切换以及参数传递。下面我将以用户态调用libc的time()函数为例,详细说明整个代码处理流程: 用户态代码调用time()函数: 用户程序包含<time.h>头文件,调用time()函数,并传入一个time_t类型的指针参数,用于存储获取到…

单片机原理及技术(二)—— AT89S51单片机(一)(C51编程)

目录 一、AT89S51单片机的片内硬件结构 二、AT89S51的引脚功能 2.1 电源及时钟引脚 2.2 控制引脚 2.3 并行 I/O口引脚 三、AT89S51的CPU 3.1 运算器 3.1.1 算术逻辑单元&#xff08;ALU&#xff09; 3.1.2 累加器A 3.1.3 程序状态字寄存器&#xff08;PSW&#xff09…