- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
当用户上传图片到我的网站时,图片会经过这个过程;
到目前为止,该网站还很小,上传目录中只有大约 200,000 张图片。我意识到我远未达到目录中文件的物理限制,但这种方法显然无法扩展,所以我想知道是否有人对处理大量图像上传的上传/存储策略有任何建议。
编辑:创建用户名(或更具体地说,用户 ID)子文件夹似乎是一个很好的解决方案。通过更多的挖掘,我在这里找到了一些很棒的信息; How to store images in your filesystem
但是,如果购买 CDN,这种 userid dir 方法是否可以很好地扩展?
最佳答案
我之前回答过一个类似的问题,但我找不到它,也许 OP 删除了他的问题......
无论如何,Adams solution似乎是迄今为止最好的,但它不是防弹的,因为 images/c/cf/
(或任何其他 dir/subdir 对)仍然可以包含多达 16^30 个唯一哈希 如果我们计算图像扩展名,文件数量至少要多 3 倍,远远超过任何常规文件系统可以处理的数量。
AFAIK,SourceForge.net 也将此系统用于项目存储库,例如 "fatfree" project将放置在 projects/f/fa/fatfree/
,但我相信它们将项目名称限制为 8 个字符。
我会将图像哈希与指示图像何时上传/处理的 DATE
/DATETIME
/TIMESTAMP
字段一起存储在数据库中然后将图像放在这样的结构中:
images/
2010/ - Year
04/ - Month
19/ - Day
231c2ee287d639adda1cdb44c189ae93.png - Image Hash
或者:
images/
2010/ - Year
0419/ - Month & Day (12 * 31 = 372)
231c2ee287d639adda1cdb44c189ae93.png - Image Hash
除了更具描述性之外,这种结构足以托管数十万张(取决于您的文件系统限制)几千年来每天的图像,这是就像 Wordpress 和其他人做的那样,我认为他们在这个上做对了。
可以在数据库中轻松查询重复的图像,您只需创建符号链接(symbolic link)。
当然,如果这对您来说还不够,您可以随时添加更多子目录(小时、分钟、...)。
我个人不会使用用户 ID,除非您的数据库中没有该信息,因为:
关于 CDN,我看不出这个方案(或任何其他方案)不起作用的任何原因......
关于php - 图片上传存储策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2648664/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!