【问题标题】:Maximum number of images on folder文件夹中的最大图像数量
【发布时间】:2014-03-24 20:45:45
【问题描述】:

我们正在处理图片库,我们预计其中有 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

【问题讨论】:

  • 4000 万张照片 á 0.5MB(不是很多)将下降到大约 20TB。您确定不会达到 HDD 限制吗?
  • @IngoBürk 是的硬盘没问题
  • 好的,只是想指出这一点。但请记住,如果不将 HDD 放入您的机器(这也不能很好地扩展),单文件夹解决方案无法很好地扩展。

标签: linux image directory directory-structure


【解决方案1】:

取决于文件系统检查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]

这会将图像请求重新路由到正确的位置

【讨论】:

  • 我可以在一个子文件夹中保存 100000 张图片,这样我的照片文件夹下就有 4000 个子文件夹
  • 我建议您加深结构,这样您在任何特定级别都只有几千或最多一万个文件/文件夹
【解决方案2】:

How many files can I put in a directory?

不要将所有文件放在一个文件夹中,它不会缩放。如果您不想从较深的文件夹层次结构开始,请从简单开始,并将构建文件夹路径的逻辑放在一个类或方法中。这样可以在需要时简单地重新排列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多