【发布时间】:2011-11-04 09:44:26
【问题描述】:
场景
用户可以发布一个项目并在帖子中包含最多 5 张图片,上传的每张图片都需要重新采样和调整大小 - 总共会创建 4 张额外的图片。这意味着如果用户上传 5 张图片,最终总共需要存储 25 张图片。
假设
- 图像已正确检查,它们是有效的图像文件
- 系统必须扩展(假设第一个实例有 1000 个帖子,因此最多 5000 个图像)
- 每张图片都根据 db post 条目的 auto_incremenet id 进行重命名,并包含相关后缀,即 12345_1_1.jpg 12345_2_1.jpg - 因此不存在重复问题
- 图像不属于敏感性质,因此直接访问它们没有问题(尽管目录列表将被禁用)
可能的方法
- 鉴于 ID 是唯一的,我们可以将它们放到一个文件夹中(在某一点之后效率低下)。
- 可以为每个帖子创建一个文件夹并将所有图像放入其中,这样 ROOT/images/12345 (同样,最终会有多个文件夹)
- 可以根据日期进行图像存储,即每天创建一个新文件夹并将日期图像存储在其中。
- 可以根据调整后的类型存储图像,即所有原始文件都可以存储在一个文件夹 images/orig 中的所有缩略图中 images/thumb (我认为 Gumtree 使用这样的方法)。
- 在创建另一个文件夹之前,可以允许 X 数量的文件存储在一个文件夹中。
在可扩展地存储图像方面,有人对最佳实践/方法有经验吗?
注意:我猜有人会提到 S3 - 假设我们想暂时将图像保存在本地。
感谢收看
【问题讨论】:
-
是否将所有图像放在一个文件夹中是否为
inefficient取决于所使用的文件系统。在 btrFS 或 Reiserfs 上,目录中的项目数与查找时间无关。检查特定文件系统的文档。 -
在同一个文件夹中有很多图像可能会很痛苦,特别是如果您想通过 (S)FTP 列出/备份内容
-
在声称“效率低下”时,我可能应该更加小心——这与文件系统提供图像的能力无关(这是他们所做的,事实上他们非常擅长它) - 但更多的是关于将 5000 张图像存储在一个文件夹中的固有开销,以及某些应用程序在尝试列出/加载它们时可能会如何崩溃(或花一整天时间来完成)。
-
什么应用?努力列出目录中的 5000 个文件?在什么系统上?好小啊!!!