首页 > 其他分享 >深入解析 MinIO 的扁平化 Bucket 设计:原理、实践与最佳操作指南

深入解析 MinIO 的扁平化 Bucket 设计:原理、实践与最佳操作指南

时间:2025-01-23 10:57:02浏览次数:3  
标签:MinIO mc 对象 Bucket bucket 目录 扁平化

言简意赅的讲解MinIO解决的痛点

在现代分布式存储中,MinIO 是一款以高性能和简单设计著称的对象存储系统。作为 S3 协议兼容的存储解决方案,它在处理海量对象时采用了扁平化设计的 bucket,这种设计不同于传统文件系统中树形的目录结构。本文将详细讲解 MinIO 扁平化 bucket 的原理、优势,并通过实践验证其实际表现。

什么是 MinIO 的扁平化 Bucket?

在 MinIO 中,bucket 是对象的逻辑集合,但与传统的文件系统不同,MinIO 的 bucket 并没有树形目录的概念。取而代之,bucket 是扁平的,所有对象存储在同一个命名空间中。所谓“目录”,实际上是对象名称中的一部分,通过对象的命名规则模拟出分层结构。

MinIO 对象的命名规则

在 MinIO 中,每个对象由以下部分组成:

  1. 对象名称(Object Name):对象的唯一标识符,可以包含类似于路径分隔符(如 /)。
  2. 元数据(Metadata):描述对象属性的键值对。
  3. 内容数据(Data):对象的实际数据。

例如,上传对象 photos/2023/vacation.jpg 时:

  • 实际上只有一个对象,名称为 photos/2023/vacation.jpg
  • 并没有真正的目录结构 photos/2023/,这只是对象名称的一部分。

扁平化的设计特点

  • 没有真正的目录结构:对象名是键值存储的键,目录是人为“模拟”的。
  • 灵活性高:任何以类似路径形式组织的对象都是逻辑分组,删除对象后该“目录”自动消失。
  • 简单高效:对象存储专注于对象本身,无需管理复杂的目录元数据。

为什么采用扁平化设计?

MinIO 的扁平化 bucket 设计源于对象存储的核心原则和实际需求:

1. 高性能和简单性

传统文件系统需要维护复杂的目录结构(树形结构),删除文件或目录时可能涉及大量元数据操作。而 MinIO 通过扁平化设计,减少了目录管理的开销,提高了操作效率。

2. 适应大规模存储

对象存储面向海量文件,扁平化设计避免了树形结构的深度限制,确保存储系统可以横向扩展。

3. 更好的灵活性

通过对象命名规则,用户可以自由组织和模拟任意“目录”结构,而底层存储无需感知这些“目录”的存在。


实践验证:MinIO 的扁平化 Bucket

第一步:使用 Docker 启动 MinIO

首先,我们需要搭建一个 MinIO 环境。通过 Docker,只需几条简单命令即可完成。

  1. 运行 MinIO 服务容器

    docker run -d --name minio -p 9000:9000 -p 9001:9001 \
    -e "MINIO_ROOT_USER=minioadmin" \
    -e "MINIO_ROOT_PASSWORD=minioadmin" \
    quay.io/minio/minio server /data --console-address ":9001"
    
  2. 进入容器

    docker exec -it minio bash
    
  3. 安装 MinIO 客户端(mc)
    MinIO 服务自带 mc 客户端工具,无需额外下载。直接在容器中使用即可。

MinIO 容器部署


第二步:验证 Bucket 是扁平化的

1. 创建 Bucket 和上传带目录结构的文件

进入 MinIO 容器后,执行以下步骤:

  1. 创建 Bucket

    mc alias set local http://127.0.0.1:9000 minioadmin minioadmin
    mc mb local/my-bucket
    
  2. 上传文件
    上传一个包含目录结构的文件:

    echo "Vacation photo" > vacation.jpg
    mc cp vacation.jpg local/my-bucket/photos/2023/
    
  3. 查看上传结果
    使用 mc ls 列出 bucket 内容:

    mc ls local/my-bucket/photos/2023/
    

    结果中可以看到文件 vacation.jpg,但并没有真正的目录。

MinIO上传成功

2. 删除文件验证目录消失
  1. 删除文件

    mc rm local/my-bucket/photos/2023/vacation.jpg
    
  2. 再次查看目录

    mc ls local/my-bucket/photos/2023/
    
    mc ls local/my-bucket/
    

    结果为空,说明目录 photos/2023/ 只是逻辑上的存在,随着对象的删除一并消失。

MinIO目录消失

3. 查看 Bucket 的扁平化特性

即使上传文件时带有“目录”结构,mc ls 直接列出所有对象:

mc ls local/my-bucket --recursive

输出显示所有文件的完整路径,而不是层级结构。

MinIO存储路径


实际物理存储:并非真正扁平化

虽然逻辑上 MinIO 的 bucket 是扁平的,但其底层存储通常采用分布式文件系统或本地文件系统进行管理。实际的物理存储可能具有树形结构,以便更高效地组织和查找数据。然而,这些细节对用户是透明的。

可以通过进入 MinIO 容器,查看 /data 路径下的实际存储文件来验证:

ls -R /data

MinIO物理存储


通过上述内容,你就已经基本理解了这个方法,基础用法我也都有展示。如果你能融会贯通,我相信你会很强

Best
Wenhao (楠博万)

标签:MinIO,mc,对象,Bucket,bucket,目录,扁平化
From: https://blog.csdn.net/m0_70878103/article/details/144960746

相关文章

  • SpringBoot整合minio(实现minio-starter)
    SpringBoot整合minio(实现minio-starter)1)依赖导入<dependencies><!--工具类相关--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></depe......
  • high performance object storage | MinIO vs. Ceph
    -[MinIO|Codeanddownloadstocreatehighperformanceobjectstorage](https://min.io/download)-[Ceph.io—Code](https://ceph.io/en/developers/code/)-[Indexof/tarballs/](https://download.ceph.com/tarballs/)-[GitHub-ceph/ceph:Cephisadistribut......
  • windows快速部署minIO,springboot快速集成
    一、Windows快速部署1.在MinIO官网下载Windows版本2.只需要下载minIOserver即可 3.在下载好的文件夹下打开cmd我是下载到了D:\MinIOminio.exeserverD:\MinIO\Data--console-address":9000"--address":9090" 在浏览器输入localhost:9000即可正常使用4.每次都要......
  • libsql bottomless 集成minio 简单使用
    libsql支持bottomless可以方便的将wal数据存储在s3中(基于了虚拟wal接口实现),以下是一个简单使用环境准备docker-compose环境开启了namespace以及集成主从服务services:db1:image:ghcr.io/tursodatabase/libsql-server:latestentrypoint:/bin/sqld--db-p......
  • k8s集成MinIo
    本篇文章分享一下在k8s怎么集成 minio做存储,并实现PersistentVolume(PV)、PersistentVolumeClaim(PVC)、动态存储卷StorageClass,以及演示让pod使用这些存储卷的完整流程。一、理论1、PV概念PV是对K8S存储资源的抽象,PV一般由运维人员创建和配置,供容器申请使用。没有PV......
  • ElasticSearch 桶(bucket)聚合
    目录桶(bucket)聚合adjacency_matrix聚合使用Limitationsauto_date_histogram(自动间隔的日期直方图聚合)键(key)间隔(interval)时区(timezone)脚本参数minimum_interval缺失的值children聚合composite(复合聚合)值的来源(valuesource)terms(词项)histogram(直方图)datehistog......
  • k8s 部署minio
    参考:https://devpress.csdn.net/k8s/66c98bb2a1ed2f4c853cb2c0.html 1、创建pvcvimminio-pvc.yml---apiVersion:v1kind:PersistentVolumeClaimmetadata:name:minio-pvcnamespace:nmg-testspec:storageClassName:"nfs-client"accessModes:......
  • 06、Docker学习,常用安装:Zookeeper、ES、Minio
    Docker学习,常用安装:Zookeeper、ES、Minio一、Docker安装Zookeeper##查询zookeeper镜像dockersearchzookeeper##拉去zookeeper镜像dockerpullzookeeper:latest##本地创建zookeeper的挂载目录mkdir-p/opt/software/myfile/zookeeper/confmkdir-p/opt/softwar......
  • Docker安装Minio
    Docker安装Minio准备工作先准备配置目录和持久化目录,举个栗子:mkdir-p/opt/module/minio/{conf,data,logs}准备配置文件*.cnf,放到/opt/module/minio/conf目录下。拉取官方minio镜像#拉取minio/minio:RELEASE.2023-11-01T18-37-25Zdockerpullminio/minio:RELEASE.......
  • 扁平化管理是成功企业的秘宝吗?-中小企实战运营和营销工作室博客
    扁平化管理是成功企业的秘宝吗?-中小企实战运营和营销工作室博客扁平化管理是一种企业管理模式,它具有一定的优势,但不能简单地将其视为成功企业的“秘宝”。一、扁平化管理的优势1,信息流通高效在扁平化管理结构中,信息传递的层次较少。例如,在一个传统的多层级企业组织......