我必须存储和管理与设计主题相关的大量信息。它可以通过两种可能的方式进行逻辑组织:
每个网站用户的目录,主题相关文件存储在此目录中。 (每个目录的文件不多)。
每个主题的目录,包含所有相关用户'这个文件。 (许多主题和许多用户)。
每次用户登录时,都必须提取相关文件。 我的网站是用PHP开发的,托管在CentOS上。这个问题是一个重要的设计问题吗?这两种选择会对存储和性能产生影响吗? 就个人而言,我觉得第一选择会更容易理解。
答案 0 :(得分:1)
大型目录一旦包含太多文件就会有很大的开销(并且“太多”的定义是操作系统和文件系统相关的;所以通常你会更好地使用更多的目录(甚至嵌套在子目录中)每个文件中的文件较少...我通常会尝试使用100个文件/目录作为上限
答案 1 :(得分:1)
经典答案总是:大型目录会降低你的表现。
但是,我们 2012 。 80年代或90年代的答案不一定是一个好的答案。
Here是一个很好的微基准测试,在LevelDB系统的上下文中完成。 在使用ext3的基准测试中,在一个包含1000个文件的目录中打开文件需要9ms,在10,000个文件中打开10ms,在100,000个文件中打开16ms。 但请记住,阅读和打开额外的目录也需要一些时间。
通常,当目录中的文件数量增加时,您应该期望对数增长。除非你使用极其脑死亡的文件系统,例如FAT32或配置搞砸了。 但是,当使用大量目录或目录层次结构时,您也可以渐进地获得相同的增长。
作为比较,这是一般过程:
在包含大量文件的目录中打开文件:
在包含少量文件的目录中打开文件,但使用另一层目录:
渐近地,它不会为了读取/写入数据而将任何东西分给大量目录。
[编辑:] W.r.t建议每个字母的字母构建一个目录层次结构。这意味着您的分支因子最多为52,并且可能是文件分布中的大偏差。有些字母更常见,目录包含更多文件。当使用隐式树结构时文件系统的分支因子,例如,将更高,分布不会扭曲。这显着降低了IO。在瞄准性能时,这简直是个坏主意。如果有人真的想要使用目录,请考虑将数据散列到目录,以至少确保良好的数据分发。