2011-06-09 125 views
0

大量文件的最佳目录结构是什么? 考虑到我有超过2000万的文件使用number_id作为文件名(例如13842985.xml)。高效的目录结构

如果会的东西去像

filename : 13842985.xml 
directory : 1/3/8/13842985.xml 

我怎样才能做到这一点正确,其中的所有文件都在每个目录和子目录均匀地撒。

+0

我只是散列文件名,并使用最后两位或三位数字将其拆分成桶 – JohnP 2011-06-09 15:32:44

+0

散布它们并将它们索引到数据库中? – Frankie 2011-06-09 15:33:12

回答

0

稍微改变你的方法来这个:

filename : 13842985.xml 
directory : 842/985/13842985.xml # use the 6 last to create the directory name 

我假定文件名是有些随机。该方案将创建1000个顶级文件夹,每个文件夹包含1000个子文件夹。从最后数字的第一而不是开始,你将得到保护,长文件名:

filename : 138429851234.xml 
directory : 851/234/138429851234.xml 

希望这有助于!

编辑:通过首先散列文件名并使用此编号,您将避免退化情况(例如,仅在开始时才会变化)。

+0

我觉得这个很好。然而,文件名被视为计数器,因此它们将从1.xml,2.xml ... 1000.xml ..... n.xml开始,直到文件数可能在1100万个或更多。这种技术是否合适? – ralpu 2011-06-09 16:12:48

+0

这种技术的可取性取决于你的文件系统。如果他们中有很多文件,一些会变慢,而另一些则不会。如果没有帮助,则不需要这样做。 – btilly 2011-06-09 20:20:57

+0

@Mao:当然,我认为这种技术对你来说工作的很好。在你的情况下,你不需要散列文件名。前1000个文件(1-1000)将进入同一文件夹,下一个1000(1001-2000)将进入下一个文件夹等。 – 2011-06-10 07:39:42

2

您可以创建目录结构,如trie

0

做一些基准测试,找出必须扫描多个directorie之间的权衡,比在不同的目录中扫描“many”文件要便宜。

在某些时候,您添加的每个目录层上的打开/扫描/安全检查/ etc等文件系统开销将高于必须解析目录以找到您想要的单个文件所节省的费用。这就是你做分割/分层切割的水平。