Linux

Linux 文件系統或 CDN,用於數百萬個具有複製功能的文件

  • September 4, 2011

請告訴我這種情況的解決方案:

  • 數百萬個文件,位於一個目錄中(“img/8898f6152a0ecd7997a68631768fb72e9ac2efe1_1.jpg”)
  • 平均約 80k 文件大小
  • 90% 隨機讀取訪問
  • 備份(複製)到其他伺服器(每 5 分鐘或立即)
  • 圖像元數據保存到數據庫中

當文件數量超過 200 萬時,我們遇到了隨機訪問時間慢的問題。文件系統是帶有noatimedir_index選項的 ext3,但不需要使用 ’ls’ 或 ‘find’ 之類的命令。

我認為可能的解決方案:

  1. 留在 ext3 並簡單地將目錄樹結構轉換為“img/889/8f6/152/a0ecd7997a68631768fb72e9ac2efe1_1.jpg”
  2. 遷移到其他文件系統(ReiserFS、XFS、EXT4 等)
  3. 使用分佈式文件系統設置儲存引擎(舉例)
  4. 或者也許其他…

如果我們選擇 1 或 2,我們如何進行複制?rsync 無法處理 ext3 文件系統上的大量數據。

對我們來說最好的解決方案是使用 Amazon S3,但這對我們的流量來說太貴了……也許你推荐一些類似的東西(便宜的 CDN 或開源項目)

一個目錄中的數百萬個文件是糟糕的設計,並且會很慢。將它們細分為條目數較少的目錄。

看看https://unix.stackexchange.com/questions/3733/number-of-files-per-directory

使用 RAID 和/或 SSD。這本身並不能解決緩慢的訪問時間,但是如果您引入多個目錄並減少每個目錄的文件數量,例如減少一兩個數量級,它將有助於防止熱點。

考慮 XFS,特別是在使用多個驅動器和多個目錄時,它可能會給您帶來不錯的收益(例如,請參閱執行緒以獲取使用選項。它為mdRAID 上的 XFS 提供了一些技巧)。

引用自:https://serverfault.com/questions/308005