为什么人们不使用序号进行图像存储?

时间:2016-02-20 18:33:01

标签: php database image server-side

我一直在环顾四周,我已经看到,例如,Instagram使用大字符串来命名他们的图像(例如,Instagram / p / BB-cCvtje4k),facebook也是如此。是否有任何将此图片命名为thisuser / 1,以及下一张图片thisuser / 2等等?或者在我的服务器端代码上执行类似下面的操作是不好的做法?

$i=1;
while(file_exists('thisuser/'.$i)) {
    i++;
}
$image_path = 'thisuser/'.$i;

谢谢!

2 个答案:

答案 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。 对于少量文件,当您不关心用户是否能够访问他不应该访问的图像时,序列号命名就可以了。