桶的概念
在 MinIO(以及 Amazon S3 这样的对象存储系统)中,桶(Bucket)是一个逻辑存储空间,类似云端文件夹,但又比传统的文件夹要更加灵活,用于存储对象(Object),列如图片、视频、日志文件等。
- 存储单位:桶是存储数据的最高层级,所有对象都必须存储在某个桶里。
 - 对象存储:桶里的文件被称为对象,对象是不可被修改的,但是可以删除后重新上传。
 - 数据隔离:桶之间的数据是相互独立的,不同的桶无法共享数据。
 - 访问控制:桶可以是私有或者公开的,可以对用户的权限进行设置。
 - 唯一性:在MinIO服务器内每个桶的名称必须唯一。
 
| 传统文件系统 | MinIO 桶 | 
|---|---|
| 使用目录层级存储文件 | 桶中存储对象,采用扁平结构 | 
| 文件可以修改 | 对象存储一般是不可修改 ,只能覆盖或删除 | 
| 本地存储,受限于磁盘 | 云存储,可无限扩展 | 
| 访问文件通常是本地路径 | 访问对象使用URL或 API | 
扁平结构:桶内没有嵌套的目录层级的结构,所有的对象都存储在一个桶内,并且每个对象有唯一的标识符(Key),这个 Key 就相当于一个模拟层级结构的伪目录
bucket-name/
    ├── images/
    │   ├── cat.jpg
    │   ├── dog.jpg
    ├── documents/
        ├── report.pdf
        ├── notes.txt
 
比如这里的 images和 documents就不是真正的文件夹,而是对象的 Key 前缀,我们在查询对象的时候,需要用到前缀查询的方式来找到某个类别的对象。
GET bucket-name?prefix=images/
 
这样就可以获取所有以 images/开头的对象,这种扁平设计的结构消除了目录层级,不像传统文件系统需要沿着目录树逐级遍历,而是通过哈希索引或者数据库查询的方式直接找到对象;传统文件系统使用的是树状结构,而这种对象存储使用的是键值映射:
Key: "images/cat.jpg" → Value: 文件存储位置
 
这种映射可以通过哈希表或者分布式数据库进行优化,查询时间通常为O(1),比遍历层级的O(log n)快的多,并且可以允许数据分布在多个服务器上,提高了并发访问能力。但它相比于传统文件系统也有一些缺陷:
- 这种对象存储的扁平结构无法对文件进行修改,不适合需要频繁修改文件内容的应用场景
 - 由于每次存储对象都涉及完整的上传和下载,对大量小文件来说操作开销和访问速度都不够高效
 - 由于没有真正的文件夹结构,所以需要批量管理对象时无法像传统文件目录一样直接对整个目录删除或者修改以及权限管理。
 - 无法像本地文件系统一样直接访问文件,必须通过API或SDK来进行访问,因此学习成本也更高,操作也没有那么直观。
 - 在本地文件系统中硬盘上的文件可以瞬间读取,但是在对象存储中文件访问一般都需要通过网络请求来获取数据,所以访问时间也会更长。
 
| 方面 | 传统文件系统 | 对象存储(MinIO) | 
|---|---|---|
| 文件修改 | 直接修改 | 只能覆盖或删除 | 
| 小文件处理 | 高效 | 访问开销较大 | 
| 目录管理 | 有真正的层级 | 仅用前缀模拟 | 
| 访问方式 | 直接 ls、mv | 依赖 API、URL | 
| 访问速度 | 本地硬盘,低延迟 | 可能有网络请求延迟 | 
尽管对象存储不适合 高频修改文件、小文件管理和低延迟访问 ,它仍然在大规模存储、分布式架构、高效检索等方面有很大优势,如果应用场景主要涉及 海量数据存储 (如备份、图片库、日志存储、数据湖),那么对象存储会是更好的选择。
访问对象
如果需要访问 MinIO 中的 Bucket 需要以下几个关键要素:
- MinIO 服务器的地址,可能是 URL 或者 IP 地址
 
https://minio.example.com
http://localhost:9000
 
- 访问凭证(Access Key 和 Secret Key)
 
Access Key: minioadmin
Secret Key: minioadmin
 
以上两个要素可以帮助连接上 MinIO 服务器,访问对象只需要再提供 Bucket 名称和对象的键即可。
 由于S3属于云存储,所以需要一个服务器的地址,同时S3的对象可以设置不同的访问权限,其中访问密钥(Access Key)和密钥(Secret Key)用于身份验证,在SDK或API请求时使用。
- 防止未授权用户访问或下载敏感信息。
 - 用于对不同的用户设置不同的访问权限(如只读、可写、完全控制)。
 - 限制公开访问,避免被恶意爬取或消耗AWS资源。
 
键值对
在对象存储中,键指的是带有前缀的文件名字符串:
Bucket(存储桶)
 ├── object1.txt (键:object1.txt)
 ├── images/photo.jpg (键:images/photo.jpg)
 ├── backups/db_20250428.sql (键:backups/db_20250428.sql)
 
注意键只是一个类似路径的层级结构的字符串而不是实际的文件夹,在存储桶内每个对象都有一个唯一的键,相当于唯一标识,其对应的值是对象的实际数据内容,比如:
键(Key):configs/settings.json
值(Value):{
  "theme": "dark",
  "language": "zh-CN"
}
 
其中对象存储的值并不是文件系统中的普通文件,而是二进制数据块,所以对象存储的值无法进行修改,只能整体进行替换。
云存储
S3是Amazon Simple Storage Service (Amazon S3),是由亚马逊云计算服务(AWS)提供的一种对象存储服务,目前S3协议已经成为对象存储的行业标准,Amazon S3的对象存储在全球各地的AWS数据中心,具体而言被分布式存储在多个可用区内,确保高持久性和可用性,AWS的数据中心采用的是分布式架构,减少硬件故障或自然灾害带来的风险。
 Amazon S3属于云存储服务,而MinIO是一个开源的对象存储服务,兼容Amazon S3 API,但可以在本地或者私有云中部署,更适合企业内部存储或自建云存储,可以把它理解成一个私有版的S3,提供类似AWS S3的对象存储功能,但可以完全自主部署在本地或私有云环境中,这意味这可以享受S3的高性能对象存储,但不需要依赖AWS公有云,同时拥有完整的控制权。
 相比 AWS S3,MinIO 适用于企业内部存储、边缘计算、本地数据中心等场景:
- 本地存储 :数据存放在自己的服务器,而不是 AWS 数据中心。
 - 隐私与安全 :完全掌控数据,不受外部云服务商限制。
 - 降低成本 :避免 AWS S3 按使用量计费,仅支付硬件成本。
 - 私有云架构 :与 Kubernetes、Docker 等技术深度集成,适用于现代化的 IT 架构。
 
对象存储系统:MinIO与AWS S3对比
        
                  
                  
                  
                  
                            
      
          
                
                
                
                
              
                
                
                
                
                
              
                
                
              
            
                  
					1313
					
被折叠的  条评论
		 为什么被折叠?
		 
		 
		
    
  
    
  
            


            