我有一個網絡服務器,它可以保存緩存文件並保存7天。文件名是MD5哈希值,即正好32個十六進制字符長,被保存在一個樹狀結構,看起來像這樣:處理大量臨時小文件
00/
00/
00000ae9355e59a3d8a314a5470753d8
.
.
00/
01/
你的想法。
我的問題是刪除舊文件需要很長時間。我有一個每天運行的cron任務
find cache/ -mtime +7 -type f -delete
需要超過半天時間才能完成。我擔心可擴展性及其對服務器性能的影響。此外,緩存目錄現在在我的系統中是一個黑洞,它偶爾陷入無辜的du
或find
。
LRU緩存的標準解決方案是某種堆。有沒有辦法將其擴展到文件系統級別? 有沒有其他的方式來實現這一點,使其更容易管理?
這裏有想法我認爲:
- 創建7個頂部目錄,每天一個星期每一天,空單目錄。這會將緩存文件的搜索時間延長7倍,當文件被覆蓋時會使其變得非常複雜,而且我不確定它會對刪除時間起什麼作用。
- 將文件保存爲帶名稱和日期索引的MySQL表中的blob。這似乎很有希望,但實際上它總是比FS慢得多。也許我做得不對。
任何想法?
錯誤:)你擊敗了我。 +1這個答案。 – 2008-11-03 09:48:01