use*_*411 0 mysql filesystems storage
我计划在网络服务器上存储许多图像(> 100,000).
文件名将为ex.
324-2012-07-25-143544.jpg
文件名是这样构建的:
用户id年 - 月 - 日 - HHMMSS.jpg
此文件名将保存在mysqldatabase中,并将从您知道文件路径的文件名中读取 - >
图片/用户名/年/月/日/用户id年 - 月 - 日 - HHMMSS.jpg
所以在这个例子中它会是
图像/二千零十二分之三百二十四/ 07/25/324-2012-07-25-143544.jpg
当everythin保存在basefolder/images中时可能出现的任何性能问题?
谢谢!
像您一样,对文件进行分片是一种避免性能问题的好方法,即在一个目录中包含许多文件:在此方法中,您确保只有少数条目(目录或文件)位于任何给定目录中.如果需要,也可以轻松拆分多个卷 - 只需将一些高级目录安装在不同的位置即可.
你应该考虑一些事情.
如果您要基本上永久存储这些图像,您可能希望根据ID进行分片.这在数据库方面更容易处理(出于同样的原因,我们在数据库设计中使用了任意主键).
就像@Veger建议的那样:imageid 123456
变成了/12/1234/123456.jpg
.
使用日期,用户ID或自动递增数字可能会带来安全风险,因为它们相对容易猜测,因此某人很容易收获所有图像.
此外,如果用户没有理由知道上传日期,则在URL中包含日期可能会泄漏信息.
如果您使用的是非常难以猜测的密钥,它可以提供一定程度的安全性来防止收获和信息泄漏.例如,您可以使用GUID:图像ID 6f33395e-eda8-4486-8b8e-51ea0f91751b
存储为/6/6f33/6f33395e/6f33395e-eda8-4486-8b8e-51ea0f91751b.jpg
.
有一个疯狂的大量的GUID(它的128位),所以它可能要花费数百万年的人收获的一切(即使你不采取任何额外的步骤,例如限制时速等每IP连接).
如果你的图像是易变的 - 也就是说,它们会在一段时间后过期 - 那么实际上最好根据日期结构进行分片,例如/2012/12/14/2012-12-14-hhmmss-userid.jpg
,或者你可以将它与guid和get结合起来/2012/12/14/6f/6f33395e-eda8-4486-8b8e-51ea0f91751b.jpg
.
如果你想删除所有2011年的文件,你就是rm -rf 2011
.您何时使用它的一个很好的例子是日志文件.
你必须记住,这只有真正有意义的一个非常高的数字图像的,因为你可以做你的数据库查询发现基于日期过时的图片,那么就删除它们一个接一个.
对计划最终存储的图像使用更高粒度的分片,但请记住,如果过于细化,则会丢失大量的目录条目开销磁盘空间.
目标是将每个目录的条目数保持为文件系统可以处理的内容; 良好的经验法则似乎是大约10,000最大.您必须预测您的网站下次获得的流量.不要发疯,在某种程度上思考你每天可能会有数百万用户.重新粉碎并非不可能,但这是一种痛苦.预测未来几年的增长并处理.如果你成长得更快并且不得不重新粉碎,那么,这是一个很好的解决问题.如果你的磁盘空间不足,因为你的目录条目比你的图像占用更多的空间,那么,这是一个愚蠢的问题需要处理.
归档时间: |
|
查看次数: |
1229 次 |
最近记录: |