2011-09-25 76 views
1

我使用的是ext3,根據Wikipedia,允許的最大子目錄大約爲32000.目前,每個用戶都有自己的目錄來上傳文件系統上的圖像。這使得檢索圖像和便於訪問變得很簡單。文件夾結構是這樣的:保存用戶圖像 - 達到最大文件夾限制

../images/<user id>/<image> 
../images/<another user id>/<image> 

我不想承諾是註定當32K用戶必須上傳圖片失敗,可擴展性,特別的設計。雖然這可能永遠不會實現,但我仍然認爲這是不好的做法。

有沒有人有一個想法,以避免這個問題?如果可能的話,我寧願不使用數據庫,因爲不必要的查詢和速度的原因。

+0

此限制是每個目錄。如果您擁有最多32k個子目錄的目錄A,則子目錄A/B可能有32k個條目,A/B/C也可能有32k個條目以及A/C可能擁有。 –

回答

1

創建時,如果我得到這個權利和IR某種形式的Web應用程序,你可以使用一些抽象層模仿該文件夾結構,並保存前一個得到充分

/images/<a>/<user id 1>/<image> 
/images/<a>/<user id 2>/<image> 
... 
/images/<a>/<user id 32000>/<image> 
/image/<b>/<user id 32001>/<image> 
... 
+0

謝謝。這正是我正在尋找的。如果我已經認識到需要將目錄'images'分開,網站將是我最擔心的問題! – Justin

0

子目錄文件在一個目錄中。在數據庫中保存文件實名,並保存上傳文件時使用某個唯一的名稱。然後從數據庫中列出用戶文件。

2

您可以有一個多層次的層次結構,其中每個層次都保證不超過最大值。例如,如果您的用戶標識符是用正則表達式[A-Za-z0-9 _] +定義的,那麼對於任何給定的字符您都有64個可能的選擇(我要添加一個空間來計算當ID更短時結束)。將兩個字符組合在一起可以得到64 * 64 = 4096個可能性。你不能做三個角色,因爲這會超過你的限制。然後通過這些信息,您可以通過將兩個字母組成的ID分開來創建目錄。例如:用戶ID「米蓋爾」和「miguel12345」會去:

/images/mi/gu/el/<image> 
/images/mi/gu/el/12/34/5/<image> 

注意最後一個組件是如何成爲一個字符長,如果ID的長度爲奇數。這很好,因爲空間被認爲是一個可能的字符,你仍然在最大子目錄限制內。

祝你好運!

+0

雖然這可行,但我認爲William Van Rensselaer是最實用和最簡單的解決方案。你的答案都在同一點,即強制每個目錄永遠不會有超過32000個子目錄。作爲附註,用戶ID是整數。謝謝 – Justin

相關問題