我一直在环顾四周,我已经看到,例如,Instagram使用大字符串来命名他们的图像(例如,Instagram / p / BB-cCvtje4k),facebook也是如此。是否有任何将此图片命名为thisuser / 1,以及下一张图片thisuser / 2等等?或者在我的服务器端代码上执行类似下面的操作是不好的做法?
$i=1;
while(file_exists('thisuser/'.$i)) {
i++;
}
$image_path = 'thisuser/'.$i;
谢谢!
答案 0 :(得分:3)
对于Instagram或Facebook规模的网站使用基数为10位的字符的缺点是该URL可能太长。请记住,Facebook每周会收到 10亿张新上传的照片。这就是很多数字。使用类似基础36字母表的东西可以减少字符数。在这种规模上,效率在多个方面都很重要。
但是,您可能没有考虑的是这些网址背后有一个非常独特的设计及其含义,它与顺序或非连续数字无关。
例如,根据Facebook's white papers中的一个在Haystack找到一针:Facebook的照片存储,他们指出网址是这样组成的http://domainname.com/filename.php?url=YOURURL 1}}其中URL的每个部分代表一个独特的物理/逻辑标识符,用于指出照片存储机制中可以从中检索照片的位置。
当用户访问页面时,Web服务器使用该目录 为每张照片构建一个URL。网址 包含几条信息,每一条都对应 到用户的步骤顺序 浏览器联系CDN(或缓存)以最终检索 来自商店中的机器的照片。一个典型的 将浏览器定向到CDN的URL看起来像 以下:
http://(CDN)/(Cache)/(Machine id)/(Logical volume, Photo)
答案 1 :(得分:1)
示例如果每天上传大量图片,您可以将文件夹分隔年/月/日/ -image_name.img-,其中image-name可以是随机uuid。 对于少量文件,当您不关心用户是否能够访问他不应该访问的图像时,序列号命名就可以了。