跳到主要内容

对象存储

对象存储概念

对象存储以扁平结构存储数据,每个对象由 Key(路径)、Value(内容)和 Metadata(元数据)组成,通过 HTTP API 访问。

云服务产品名
AWSS3
阿里云OSS
腾讯云COS
私有部署MinIO

MinIO 私有部署

Docker Compose 部署
services:
minio:
image: quay.io/minio/minio
command: server /data --console-address ":9001"
ports:
- "9000:9000" # S3 API
- "9001:9001" # Web 控制台
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: strong_password
volumes:
- minio_data:/data

volumes:
minio_data:
mc 客户端操作
# 配置别名
mc alias set myminio http://localhost:9000 admin strong_password

# 创建 Bucket
mc mb myminio/my-bucket

# 上传/下载
mc cp file.tar.gz myminio/my-bucket/backups/
mc cp myminio/my-bucket/backups/file.tar.gz ./

# 设置生命周期(30 天后删除)
mc ilm rule add --expiry-days 30 myminio/my-bucket

S3 API 常用操作(Python boto3)

import boto3

s3 = boto3.client('s3',
endpoint_url='http://minio:9000',
aws_access_key_id='admin',
aws_secret_access_key='strong_password'
)

# 上传文件
s3.upload_file('backup.sql.gz', 'my-bucket', 'db/backup.sql.gz')

# 生成预签名 URL(临时下载链接,1小时有效)
url = s3.generate_presigned_url(
'get_object',
Params={'Bucket': 'my-bucket', 'Key': 'db/backup.sql.gz'},
ExpiresIn=3600
)

常见面试问题

Q1: 对象存储和文件存储的区别?

答案

维度文件存储对象存储
结构目录树层级扁平 Key-Value
接口POSIX(open/read/write)HTTP API(PUT/GET)
修改支持随机写整体替换
适用需要挂载的场景海量非结构化数据
扩展性有限近乎无限

相关链接