我们正在制作图片库,我们预计会有100万到4000万张照片,但我们正在考虑将它们保存在照片文件夹中 但一个照片文件夹可以保存4000万张照片。如果我直接将它们保存在照片文件夹中而不创建任何子文件夹是否有任何问题我必须根据上传日期创建文件夹,以便在任何给定日期,当天上传的照片将进入那天的文件夹。
我在创建该结构时没有任何问题,但从知识的角度来看,如果我们将几百万张照片直接保存在一个文件夹中,我想知道问题是什么。我见过很少有网站这样做,例如,如果你看到这个页面,所有图像都在图像文件夹下。
大约有500万张图片。所有图片都在相应的ID下面,例如下面 4132808因此它显示在images目录下有超过500万个子文件夹。可以将多少文件夹保存在一个目录下http://www.listal.com/viewimage/4132808 http://iv1.lisimg.com/image/4132808/600full-the-hobbit%3A-an-unexpected-journey-photo.jpg
答案 0 :(得分:2)
取决于文件系统检查the file system comparison page on Wikipedia以进行比较。 但是,您可能希望对某些结构进行排序,例如
images/[1st 2 char of some kind of hash/[2nd 2 char of hash]/...
通过这种方式,您可以创建一个易于重现的路径,从而大幅减少一个文件夹中的文件数量。 你想这样做是因为无论如何你想要列出文件夹的内容(或任何应用程序需要这样做),都会导致巨大的性能问题。
您在其他网站上看到的只是您发布这些图片的方式。当然,它们似乎可以从安全URL中提供,但在底层结构中,您需要以某种方式对文件进行分区。
一些计算:
假设您使用文件名的sha256哈希来创建路径。那给你40个[0-9a-f]的字符。因此,如果您选择2个字母的子文件夹,那么每个级别上有256个文件夹。现在让我们假设您执行3个级别:ab/cd/ef/1234...png
。这是256 ^ 3文件夹意味着 1600万。所以,即使你可以拍摄数十亿张照片。
至于服务文件,您可以使用apache + mod_rewrite:
执行此类操作RewriteEngine On
RewriteCond %{REQUEST_URI} !^/images/../../../.*
RewriteRule ^/images/(..)(..)(..)(.*)$ /images/$1/$2/$3/$4 [L]
这会将图像请求重新路由到正确的位置
答案 1 :(得分:2)
请参阅How many files can I put in a directory?。
不要将所有文件放在一个文件夹中,它不会缩放。如果您不想从深层文件夹层次结构开始,请从简单开始,并将构建路径的逻辑放在一个类或方法中的文件夹中。如果需要,这允许稍后重新排列。