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