如何像在一个目录中一样提供50万个文件?

我将要生成大约5000万个想要提供的HTML文件。 每个文件都有一个唯一的ID(例如,thingy),我想把它们放在一个目录中(例如example.com/thingy)。

我怀疑把五千万个文件放在一个目录中是要求神打我下来的,所以我倾向于用嵌套的目录来做(比如,thingy在/ t / h / i / thingy中)。 我想我可以用Apache和mod_rewrite做到这一点,没有太多的痛苦,但我想知道是否有其他更有意义的选项。

如果有关系,我打算在Linux上这样做。

你确定所有的(或大部分)50M文件将被要求吗? 如果不是,如果你的问题域允许,你可以考虑采取“懒计算”的方法。 也就是说,只生成(然后caching)实际请求的文件。

不过,是的,你会想要使用一个嵌套的目录结构(比如3+层以上),这样没有一个目录可以获得超过几千个文件。 然后,使用mod_rewrite将请求转换为实际的物理文件名称,如下所示(但可能有更多的检查和逻辑):

RewriteRule (\w)(\w)(\w)(\w+) /path/to/cache/$1/$2/$3/$1$2$3$4 [L] 

最后,有些文件系统比其他文件系统更有效地处理大量文件,所以在投入生产之前,您可能需要对一些候选项(如ext4,xfs,jfs,reiserfs)进行一些testing和基准testing。

不,mod_rewrite是你如何做到这一点。

对于这种事情,我会使用数据库,并从数据库中提供文件。 您可能能够对页面进行模板化,以便在数据库中没有完整的页面。

根据您生成页面的方式,请考虑将生成页面的源放在数据库中,并根据需要生成页面。 有一些caching技术可以用来防止在每次请求时生成页面。