在目錄中儲存檔案...有限制嗎?

在目錄中儲存檔案...有限制嗎?

我正在使用 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

如果您的圖像數量超過數百張,請務必考慮兩件事:

  1. 帶有散列檔案名稱的嵌套層次結構;
  2. 不使用 ext3

我建議使用 XFS,或者,如果失敗的話,使用 ReiserFS,其具有由兩位元組對劃分的兩層或三層目錄層次結構。例如

11/2f/112f667c786eac323e300632b5b2a78d.jpg
49/2f/49ef6eb6169cc57d95218c842d3dee5c.jpg
0a/26/0a26f9f363f1d05b94ceb14ff5f27284.jpg

這將在前幾個關卡中為您提供 256 個目錄,將圖像分為總共 65535 個單獨的目錄(這對於 100-200k 及更多圖像來說綽綽有餘)。它將使事情變得更快、更具可擴展性,也使以後的維護變得更加容易。

相關內容