对象存储
对象存储概念
对象存储以扁平结构存储数据,每个对象由 Key(路径)、Value(内容)和 Metadata(元数据)组成,通过 HTTP API 访问。
| 云服务 | 产品名 |
|---|---|
| AWS | S3 |
| 阿里云 | 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) |
| 修改 | 支持随机写 | 整体替换 |
| 适用 | 需要挂载的场景 | 海量非结构化数据 |
| 扩展性 | 有限 | 近乎无限 |