
我正在使用 CentOS 5 和 Plesk 9(64 位元),我正在運行一個用戶將上傳圖片的網站。對於 64 位元作業系統,我可以儲存的檔案數量有限制嗎?我關心的只是性能和提供文件。我不希望在 4 個目錄中存放分散的檔案。然而,我希望在某個時候我可以擁有 200-30 萬張圖像。
答案1
如果你是使用ext3, 我發現這個報價(警告:西班牙語網站)
「單一目錄中有 32k (32768) 個子目錄的限制,這一限制可能只是出於學術興趣,因為許多人甚至沒有那麼多文件(儘管龐大的郵件伺服器可能需要記住這一點)。ext2 inode 規範允許超過100 兆個檔案駐留在單一目錄中”
進一步閱讀顯示 ext3不有 32K 的限制,這可以透過經驗證明
a=0; i=1; while [ $a == 0 ]; do touch $i; a=$?; let i++; done
但它確實有資料夾的 32K 資料夾限制,可以使用以下命令進行測試
a=0; i=1; while [ $a == 0 ]; do mkdir $i; a=$?; let i++; done
ReiserFS 對於單一目錄中的數十萬個檔案完全沒有問題。 flabdablet - 2007 年 2 月 1 日
這個問題來自姊妹網站 stackoverflow.com 也可以幫忙。
一般來說:
- 那裡是目錄數量的限制,
- 你應該將檔案/目錄保持在 32K 以下,但是能走得更遠,
- 您使用的檔案系統確實很重要。
答案2
這很大程度上取決於您使用的檔案系統。某些舊版的 ext3 在這方面表現得很糟糕,這就是 btree 的產生方式。對於此類大量文件,Reiser 的效能要高得多。以前,由於 GroupWise 的問題,我在 NetWare 伺服器上有一個 Novell NSS 目錄,其中包含 250,000 個 4kb 文件,而且它運作得很好。枚舉目錄很麻煩,但是存取該目錄中的特定檔案卻可以像您希望的那樣快。這是 8 年前的事了,我必須假設現代 Linux 檔案系統可以輕鬆處理這個問題。
答案3
這取決於您使用的檔案系統,而不是作業系統的 64 位元特性。對於每個檔案系統,都會有某個時刻,用於搜尋目錄的演算法的大 O 成本將比電腦更好。
如果您可以將檔案層次結構分解為兩 (2) 層層次結構,您將看到更好的長期可擴展性。
答案4
如果您的圖像數量超過數百張,請務必考慮兩件事:
- 帶有散列檔案名稱的嵌套層次結構;
- 不使用 ext3
我建議使用 XFS,或者,如果失敗的話,使用 ReiserFS,其具有由兩位元組對劃分的兩層或三層目錄層次結構。例如
11/2f/112f667c786eac323e300632b5b2a78d.jpg
49/2f/49ef6eb6169cc57d95218c842d3dee5c.jpg
0a/26/0a26f9f363f1d05b94ceb14ff5f27284.jpg
這將在前幾個關卡中為您提供 256 個目錄,將圖像分為總共 65535 個單獨的目錄(這對於 100-200k 及更多圖像來說綽綽有餘)。它將使事情變得更快、更具可擴展性,也使以後的維護變得更加容易。