Linux

用於在 USB 驅動器上儲存 100k 文件的最佳文件夾結構

  • December 29, 2010

我需要在 USB 驅動器中儲存 100k 個文件(大約 40GB)。每個文件都有一個唯一的 int id(例如 45000)。

選項一是將所有文件放在一個文件夾中:

root/
root/1.pdf
root/2.pdf
root/3.pdf
...
root/567.pdf
root/568.pdf
root/569.pdf
...
root/10001.pdf
root/10002.pdf
root/10003.pdf
...
root/99998.pdf
root/99999.pdf
root/100000.pdf

選項二[1-9][0-9]*是基於該 id創建文件夾層次結構:

root/
root/1/file.pdf
root/2/file.pdf
root/3/file.pdf
...
root/5/6/7/file.pdf
root/5/6/8/file.pdf
root/5/6/9/file.pdf
...
root/1/0/0/0/1/file.pdf
root/1/0/0/0/2/file.pdf
root/1/0/0/0/3/file.pdf
...
root/9/9/9/9/8/file.pdf
root/9/9/9/9/9/file.pdf
root/1/0/0/0/0/0/file.pdf

哪個選項會更好地擴展?我可以理解第二個選項需要大量文件夾,但每個文件夾最多包含 10 個文件夾和 1 個文件。維護將不是問題,因為一切都將由應用程序控制。

請注意,這是 linux 上的 USB 驅動器,基於上述內容,我還想知道我應該使用 FAT32 還是 NTFS。

我個人偏好推薦 ext3/4 與 Linux 一起使用。

對於文件結構,我推薦選項 3(目錄深度和每個目錄文件的平衡)。這實際上只是選擇樹資料結構。為了對文件實現這一點,我將對每個文件進行 md5sum 雜湊,並將每個文件的前 x 個字元用作目錄。這些字元將始終是十六進製字元,因此每個分支將是 16 個目錄寬。您選擇的字元數將是樹結構的高度。

例如:

kbrandt@alpine:~/scrap$ md5sum y.tab.h
03b01228467fbe94f8fedd9fcbb6d470  y.tab.h

會去一個類似的東西./0/3/b/y.tab.h

如何在linux上預先創建目錄用於文件儲存?向您展示如何預先創建目錄。

這是一個通用的解決方案,適用於許多案例,並且應該創建一個非常好的文件分佈。

引用自:https://serverfault.com/questions/217043