这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
文件命名与目录设计
OSS 上出现了一个巨型目录
迁移到 OSS 后的第一个周末,我在 OSS 控制台看了一眼文件列表:
guangying-images/
originals/
a3f8c2e1b4567890abcdef1234567890.jpg
b7d9e1f234567890abcdef1234567890.jpg
c1e2f3a4567890123456789012345678.jpg
d4e5f678901234567890123456789abcd.jpg
... (3,500 个文件,全平铺在一个目录下)3,500 个文件不算多,但 OSS 的 list_objects API 在单目录下文件数超过 1,000 时性能开始下降。等到 100 万张图时,这个接口会慢到不可用。
更重要的是,很多文件系统(包括 OSS 的内部索引)对单目录下的文件数量有隐性限制。
扁平目录 vs 分层目录
我的设计:四层目录结构
经过研究,我设计了这样的目录结构:
originals/
2024/
06/
a3/
a3f8c2e1.jpg
a3b7d9e1.png
b7/
b7d9e1f2.jpg
...
07/
...
thumbs/
small/
2024/06/a3/a3f8c2e1_small.webp
medium/
2024/06/a3/a3f8c2e1_medium.webp
large/
2024/06/a3/a3f8c2e1_large.webp为什么取哈希前 2 位?