Linux
Linux 文件系統或 CDN,用於數百萬個具有複製功能的文件
請告訴我這種情況的解決方案:
- 數百萬個文件,位於一個目錄中(“img/8898f6152a0ecd7997a68631768fb72e9ac2efe1_1.jpg”)
- 平均約 80k 文件大小
- 90% 隨機讀取訪問
- 備份(複製)到其他伺服器(每 5 分鐘或立即)
- 圖像元數據保存到數據庫中
當文件數量超過 200 萬時,我們遇到了隨機訪問時間慢的問題。文件系統是帶有noatime和dir_index選項的 ext3,但不需要使用 ’ls’ 或 ‘find’ 之類的命令。
我認為可能的解決方案:
- 留在 ext3 並簡單地將目錄樹結構轉換為“img/889/8f6/152/a0ecd7997a68631768fb72e9ac2efe1_1.jpg”
- 遷移到其他文件系統(ReiserFS、XFS、EXT4 等)
- 使用分佈式文件系統設置儲存引擎(舉例)
- 或者也許其他…
如果我們選擇 1 或 2,我們如何進行複制?rsync 無法處理 ext3 文件系統上的大量數據。
對我們來說最好的解決方案是使用 Amazon S3,但這對我們的流量來說太貴了……也許你推荐一些類似的東西(便宜的 CDN 或開源項目)
一個目錄中的數百萬個文件是糟糕的設計,並且會很慢。將它們細分為條目數較少的目錄。
看看https://unix.stackexchange.com/questions/3733/number-of-files-per-directory
使用 RAID 和/或 SSD。這本身並不能解決緩慢的訪問時間,但是如果您引入多個目錄並減少每個目錄的文件數量,例如減少一兩個數量級,它將有助於防止熱點。
考慮 XFS,特別是在使用多個驅動器和多個目錄時,它可能會給您帶來不錯的收益(例如,請參閱此執行緒以獲取使用選項。它為
md
RAID 上的 XFS 提供了一些技巧)。