[英]Many files in one directory?
我在Linux平台上開發了一些PHP項目。 將數千個圖像(文件)放在一個目錄中是否有任何缺點? 這是封閉的,不會增長。 另一種方法是使用基於某個ID的目錄結構來分離這些文件(這樣一來,在一個目錄中就會說只有100個)。
我問這個問題,因為當我在不同網站上查看圖片網址時,我常常看到這種分離。 您可以看到以這種方式完成目錄分離,即一個目錄中不會有數百個圖像。
如果不將幾千個文件(不增長的集合)放在一個目錄中,而是將它們分成100組,我會得到什么? 是不是值得復雜化?
更新:
來自答復的有價值的信息:
為什么將許多文件分成不同的目錄:
除了通過將圖像分成子目錄來加快文件訪問速度之外,還可以在達到文件系統的自然限制之前顯着擴展可以跟蹤的文件數。
一個簡單的方法是md5()
文件名,然后使用前n個字符作為目錄名(例如, substr(md5($filename), 2)
)。 這確保了合理均勻的分布(與直接文件名的前n個字符相比)。
通常,這種拆分的原因是文件系統性能。 對於一組封閉的5000個文件,我不確定這是值得的麻煩。 我建議您嘗試將所有文件放在一個目錄中的簡單方法,但要密切關注訪問文件所需的實際時間。
如果你發現它不能滿足你的需求,你可以像你建議的那樣拆分它。
出於性能原因,我不得不自己拆分文件。 另外,當在nfs上使用ext3時,我在每個目錄中遇到了32k文件限制(不確定它是否是nfs或ext3的限制)。 這是拆分成多個目錄的另一個原因。 在任何情況下,嘗試使用單個目錄,只有在看到它不夠快時才會拆分。
我認為這個問題有兩個方面:
您正在使用的Linux文件系統是否有效支持包含數千個文件的目錄。 我不是專家,但我認為較新的文件系統不會有問題。
特定PHP函數是否存在性能問題? 我認為直接訪問文件應該沒問題,但如果您正在進行目錄列表,那么最終可能會遇到時間或內存問題。
如果您不希望任何文件名沖突,並且您不需要在任何時候迭代這些圖像,則沒有理由將這些文件拆分為多個目錄。
但是,如果你能想到一個暗示性的分類,那么對圖像進行一些排序並不是一個壞主意,即使它只是出於維護原因。
我可以想象它在哪里有害的唯一原因是迭代目錄。 更多文件,意味着更多迭代。 但從編程的角度來看,這基本上就是我所能想到的。
幾千張圖片還可以。 當您訪問目錄時,操作系統會按4K塊讀取其文件列表。 如果你有普通的目錄結構,如果有很多(例如十萬)文件,則可能需要一些時間來閱讀整個文件列表。
如果更改文件系統是一個選項,我建議您將所有圖像存儲到ReiserFS文件系統的任何位置移動。 它非常適合快速存儲/訪問大量小文件。
如果沒有,MightyE將其分解為文件夾的響應是最符合邏輯的,並且會大大增加訪問時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.