存储1000张照片的最佳文件结构(不同大小)

我正在开发一个让人们上传图片的网站。 我们调整每个图像的大小4。 我们期待着很多很多的图像,并且正在考虑如何提高文件结构的性能,因为我们并不需要一个10000个文件的目录。 有人对我们如何组织文件有任何build议吗?

显而易见的选项是

每个用户都有自己的文件夹,并在每个大小的文件夹内

(四个文件夹中的每一个都可以容纳很多图像)

/user_uploads/user01/ |-/size_thumb/ |-/size_small/ |-/size_medium/ |-/size_large/ /user_uploads/user02/ |-/size_thumb/ |-/size_small/ |-/size_medium/ |-/size_large/ etc etc 

每个用户的照片存储在每个用户的一个文件夹 (每个目录更多的照片,但较less的整体目录)

 /user_uploads/user01/ /user_uploads/user02/ etc etc 

每张照片按大小存储

每个目录有很多很多的照片(可能有更多的子文件夹?)

 /user_uploads/small/ /user_uploads/medium/ /user_uploads/large/ /user_uploads/thumbs/ 

任何人有任何想法? 我想我们可能会去/user_uploads/userID/除非任何人有任何build议。

(现在一切都将托pipe在一台计算机上,所以我们不必担心文件在不同的服务器上)

您可能想要在上传图像时尝试对图像进行md5哈希处理,然后将其存储在如下所示的目录结构中。 假设3个图像哈希到:

  1. 2b00042f7481c7b056c4b410d28f33cf
  2. 84bdbf7c4d48e16642af4c317df428c2
  3. 7b2a7edc6e86224d6ba0f97b717c80ed

和一个文件夹结构如下所示:

 /images/orig/2/2b/2b0/2b00042f7481c7b056c4b410d28f33cf.jpg
 /images/orig/8/84/84b/84bdbf7c4d48e16642af4c317df428c2.jpg
 /images/orig/7/7b/7b2/7b2a7edc6e86224d6ba0f97b717c80ed.jpg

 /images/large/2/2b/2b0/2b00042f7481c7b056c4b410d28f33cf.jpg
 /images/large/8/84/84b/84bdbf7c4d48e16642af4c317df428c2.jpg
 /images/large/7/7b/7b2/7b2a7edc6e86224d6ba0f97b717c80ed.jpg

 /images/small/2/2b/2b0/2b00042f7481c7b056c4b410d28f33cf.jpg
 /images/small/8/84/84b/84bdbf7c4d48e16642af4c317df428c2.jpg
 /images/small/7/7b/7b2/7b2a7edc6e86224d6ba0f97b717c80ed.jpg

您可以按照上述模式制作多个级别,以便保持目录大小的可pipe理性。 此外,如果你愿意,你可以使用一些用户ID来识别图像,并仍然使用类似的结构,例如假设用户ID为14:(/images/orig/0/00/0014/0014.jpg)

您可以将用户 – >图像哈希数据存储在数据库中,同时将图像保留在文件系统上。 无论将图像存储在数据库中是否可能,都有可能不想这样做。 将它们保留在文件系统上使它们更容易移动,比如说CDN,或者随着您的成长而移动到云中。 它也允许你把目录放在不同的磁盘上,以提高读取性能,如果这是你的事情。

将原始图像散列到md5的事实意味着,如果有30个人上传完全相同的图像,则只会在文件系统上保留该图像的一个副本(全部大小),而不是30个副本。