簡體   English   中英

一個目錄中的許多文件?

[英]Many files in one directory?

我在Linux平台上開發了一些PHP項目。 將數千個圖像(文件)放在一個目錄中是否有任何缺點? 這是封閉的,不會增長。 另一種方法是使用基於某個ID的目錄結構來分離這些文件(這樣一來,在一個目錄中就會說只有100個)。

我問這個問題,因為當我在不同網站上查看圖片網址時,我常常看到這種分離。 您可以看到以這種方式完成目錄分離,即一個目錄中不會有數百個圖像。

如果不將幾千個文件(不增長的集合)放在一個目錄中,而是將它們分成100組,我會得到什么? 是不是值得復雜化?

更新:

  • 對目錄中的文件不會進行任何編程迭代(只需通過文件名直接訪問圖像)
  • 我想強調圖像集已關閉。 它不到5000張圖像,就是這樣。
  • 此圖像沒有邏輯分類
  • 不需要人工訪問/瀏覽
  • 圖像具有唯一的文件名
  • 操作系統:Debian / Linux 2.6.26-2-686,文件系統:ext3

來自答復的有價值的信息:

為什么將許多文件分成不同的目錄:

  • “在nfs上使用ext3時,每個目錄限制32k文件”
  • 性能原因(訪問速度)[但對於幾千個文件很難說它是否值得,沒有測量]

除了通過將圖像分成子目錄來加快文件訪問速度之外,還可以在達到文件系統的自然限制之前顯着擴展可以跟蹤的文件數。

一個簡單的方法是md5()文件名,然后使用前n個字符作為目錄名(例如, substr(md5($filename), 2) )。 這確保了合理均勻的分布(與直接文件名的前n個字符相比)。

通常,這種拆分的原因是文件系統性能。 對於一組封閉的5000個文件,我不確定這是值得的麻煩。 我建議您嘗試將所有文​​件放在一個目錄中的簡單方法,但要密切關注訪問文件所需的實際時間。

如果你發現它不能滿足你的需求,你可以像你建議的那樣拆分它。

出於性能原因,我不得不自己拆分文件。 另外,當在nfs上使用ext3時,我在每個目錄中遇到了32k文件限制(不確定它是否是nfs或ext3的限制)。 這是拆分成多個目錄的另一個原因。 在任何情況下,嘗試使用單個目錄,只有在看到它不夠快時才會拆分。

我認為這個問題有兩個方面:

  1. 您正在使用的Linux文件系統是否有效支持包含數千個文件的目錄。 我不是專家,但我認為較新的文件系統不會有問題。

  2. 特定PHP函數是否存在性能問題? 我認為直接訪問文件應該沒問題,但如果您正在進行目錄列表,那么最終可能會遇到時間或內​​存問題。

如果您不希望任何文件名沖突,並且您不需要在任何時候迭代這些圖像,則沒有理由將這些文件拆分為多個目錄。

但是,如果你能想到一個暗示性的分類,那么對圖像進行一些排序並不是一個壞主意,即使它只是出於維護原因。

我可以想象它在哪里有害的唯一原因是迭代目錄。 更多文件,意味着更多迭代。 但從編程的角度來看,這基本上就是我所能想到的。

幾千張圖片還可以。 當您訪問目錄時,操作系統會按4K塊讀取其文件列表。 如果你有普通的目錄結構,如果有很多(例如十萬)文件,則可能需要一些時間來閱讀整個文件列表。

如果更改文件系統是一個選項,我建議您將所有圖像存儲到ReiserFS文件系統的任何位置移動。 它非常適合快速存儲/訪問大量小文件。

如果沒有,MightyE將其分解為文件夾的響應是最符合邏輯的,並且會大大增加訪問時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM