我将生成大约 5000 万个我想要提供的 HTML 文件。每个文件都有一个唯一的 id(例如,thingy),我想将它们提供给它们,就好像它们都在一个目录中一样(例如,example.com/thingy)。
我怀疑将 5000 万个文件放在一个目录中是在请求上帝打击我,所以我倾向于使用嵌套目录(例如,thingy 在 /t/h/i/thingy 中)。我想我可以用 Apache 和 mod_rewrite 做到这一点而不会太痛苦,但我想知道是否还有其他更有意义的选择。
如果重要的话,我打算在 Linux 上执行此操作。
您确定会请求所有(或大部分)50M 文件吗?如果没有,并且您的问题域允许,您可以考虑采用“惰性计算”方法。也就是说,只生成(然后缓存)那些实际请求的文件。
仍然,是的,您将希望使用嵌套目录结构(比如 3+ 层深),这样单个目录中的文件不会超过几千个。然后,使用 mod_rewrite 将请求转换为实际的物理文件名,如下所示(但可能需要更多检查和逻辑):
RewriteRule (\w)(\w)(\w)(\w+) /path/to/cache/$1/$2/$3/$1$2$3$4 [L]
Run Code Online (Sandbox Code Playgroud)
最后,某些文件系统在处理大量文件方面比其他文件系统更好,因此您可能希望在投入生产之前对一些候选文件(例如 ext4、xfs、jfs、reiserfs)进行一些测试和基准测试。