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

Why people don't use sequential numbers for image storage?

我环顾四周发现,例如,instagram 使用大字符串来命名其图像(例如 instagram/p/BB-cCvtje4k),facebook 也是如此。将图片命名为 thisuser/1,将下一张图片命名为 thisuser/2 等有任何缺点吗?还是在我的服务器端代码中执行类似以下操作是不好的做法?

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

谢谢!

在 Instagram 或 Facebook 规模的网站上使用 10 位数字字符的缺点是 URL 可能太长了。请记住,Facebook 每周收到 10 亿张新照片上传。所以这是很多数字。使用类似 base 36 字母表的东西可能会减少字符数。在这种规模下,效率在多个方面都很重要。

但是,您可能没有考虑到 URL 背后有一个非常独特的设计及其含义,它与顺序或非顺序数字无关。

例如,根据 Facebook's white papers 中的一位在他们的 干草堆里找一根针:Facebook 的照片存储,他们指出 URL 是如此组成 http://(CDN)/(Cache)/(Machine id)/(Logical volume, Photo),其中 URL 的每个部分代表一个不同的 physical/logical 标识符,该标识符指出照片存储机制中可以从中检索照片的位置。

When a user visits a page the web server uses the Directory to construct a URL for each photo. The URL contains several pieces of information, each piece corresponding to the sequence of steps from when a user’s browser contacts the CDN (or Cache) to ultimately retrieving a photo from a machine in the Store. A typical URL that directs the browser to the CDN looks like the following: http://(CDN)/(Cache)/(Machine id)/(Logical volume, Photo)

Sherif的回答很好的描述了问题。简而言之,这完全取决于您的期望 - 总共或每天会有多少张图片,您是否会使用它们将其显示给用户。

例如,如果每天要上传大量图片,您可以隔离文件夹year/month/day/-image_name.img-,其中图片名称可以是随机uuid。 对于少量文件,并且当您不关心用户是否能够访问他不应该访问的图像时,顺序编号命名就可以了。