Php 使用长目录路径/名称和URL';他在一个灯塔上?

Php 使用长目录路径/名称和URL';他在一个灯塔上?,php,linux,image,directory,lamp,Php,Linux,Image,Directory,Lamp,可能重复: LAMP站点上较长的目录路径/名称和URL的缺点是什么 我正试图尽可能高效地组织网站上的图像,并且我热衷于使用许多嵌套目录,这样子目录就不会有超过1000个子目录,而且这些目录很容易跨多个用户进行维护 在最坏的情况下,图像的存储方式如下所示: ./images/76/543/7654321/640/1.jpg ./i/a7/c3/5e.jpg 有这么多子目录与像这样简单的东西相比,有没有严重的缺点: ./images/76/543/7654321/640/1.jpg ./i/

可能重复:

LAMP站点上较长的目录路径/名称和URL的缺点是什么

我正试图尽可能高效地组织网站上的图像,并且我热衷于使用许多嵌套目录,这样子目录就不会有超过1000个子目录,而且这些目录很容易跨多个用户进行维护

在最坏的情况下,图像的存储方式如下所示:

./images/76/543/7654321/640/1.jpg
./i/a7/c3/5e.jpg
有这么多子目录与像这样简单的东西相比,有没有严重的缺点:

./images/76/543/7654321/640/1.jpg
./i/a7/c3/5e.jpg
我假设服务器需要挖掘的子目录越多,需要花费的时间就越长,目录结构越长,URL就越长,因此HREF在HTML文档中占用的空间就越大。但是这会有多大的不同呢?假设我们扩展到数百万用户,这是我需要考虑的(短目录结构与长目录结构)还是使用更长的目录结构


谢谢

您可以使用随您的需求和经验“增长”的存储

假设您基于图像本身创建图像的文件名,例如,在其内容上使用SHA1,例如
b494ad9057e09277fd02e811bb8e86b322a5166b。jpg
可以是名称

然后,图像存储在文件系统的“images”目录中

用于访问该文件的URI始终是
images/b494ad9057e09277fd02e811bb8e86b322a5166b.jpg

现在,奇迹发生在Apache的mod_rewrite中。请求的资源可以按任何方式拆分,例如,将其拆分为
图像/b494ad9057e09277fd02/e811bb8e86b322a5166b.jpg
(请注意散列的第20个字符后的斜杠),然后从中加载

一旦从文件系统专家那里得到答案,就可以更改URI的拆分方式,并将所有文件移动到新的预期位置,因为始终可以通过遍历目录层次结构来构建“原始”文件名


此外,一个好的散列应该在散列中创建“均匀分布的字符”,因此您的目录应该或多或少以一种平衡的方式填充。

如果在移动内容之前在单个映像目录中获得大量文件,那么您需要小心最大化inode表。inode是每个分区(文件系统),不是每个目录。因此,只要整个目录层次结构位于一个分区上,就inode计数而言,没有进一步的结构目录比有结构目录更好。