2011-06-09 78 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等文件系統開銷將高於必須解析目錄以找到您想要的單個文件所節省的費用。這就是你做分割/分層切割的水平。