在WEB開發中經常會遇到寫檔案的情況,最常見的莫過於保存圖片檔案。如果是文件數量不多,那我們完全沒有必要擔心其效率問題。但是當你有大量的用戶,大量的圖片的時候,我們怎麼儲存圖片文件,就會直接影響整個圖片儲存系統的效率。
通常,有一種說法是:如1個目錄下有10000個子文件,那麼讀取某個文件的速度將會明顯下降。那這種說法到底正確不正確呢?下面我們來看看:
問:為什麼單目錄下子文件過多會影響性能?如1個目錄下有10000個子文件,那麼讀取某個文件的速度將會明顯慢下來?這和文件索引有關嗎?索引中如何組織這些節點?
答:是的,與索引有關。 1w個不算多。上百萬個就看出來了。但建議不要超過10000個。
問:上百萬個慢是檔案系統整體吧,那麼和當前目錄怎麼關係上呢?一個差不多的檔案系統支援幾百萬個檔案不算什麼
答:我是說一個目錄下,不分子目錄,直接放他幾十萬上百萬的文件,此時檢索這個目錄索引很費資源。
支援數量有限是因為目錄這個物件本身容納的大小有被限制,目錄就是一個容納檔案名稱和檔案對應inode號的容器,被限制了,那麼容納的條目也就被限制了。
讀取某個檔案速度沒影響。但是查找就費勁了。某些檔案系統的索引機制不完善,甚至沒有任何最佳化演算法,致使每次查找耗費更多的時間。
從上面的問答我們可以知道,「如1個目錄下有10000個子文件,那麼讀取某個文件的速度將會明顯下降。」的說法是對的。那如何分目錄呢?
其實也比較簡單,可以按月份分,hash分,時間加hash組合分,至於用哪種方法,那就要看你的專案需求了。 。 。