キャッシュファイルを保存して7日間保持するWebサーバーがあります。ファイル名はmd5ハッシュ、つまり正確に32文字の16進文字であり、次のようなツリー構造で保持されています。
00/
00/
00000ae9355e59a3d8a314a5470753d8
.
.
00/
01/
あなたはその考えを理解します。
私の問題は、古いファイルの削除に非常に長い時間がかかることです。私は毎日実行するcronジョブを持っています
find cache/ -mtime +7 -type f -delete
完了するまでに半日以上かかります。スケーラビリティと、これがサーバーのパフォーマンスに与える影響について心配しています。さらに、キャッシュディレクトリは私のシステムのブラックホールになり、時折無実du
またはをトラップしfind
ます。
LRUキャッシュの標準的なソリューションは、ある種のヒープです。これをファイルシステムレベルにスケーリングする方法はありますか?管理を容易にする方法でこれを実装する他の方法はありますか?
これが私が考えたアイデアです:
- 平日ごとに1つずつ、合計7つのトップディレクトリを作成し、毎日1つのディレクトリを空にします。これにより、キャッシュファイルのシーク時間が7倍になり、ファイルが上書きされると非常に複雑になり、削除時間にどのように影響するかわかりません。
- 名前と日付にインデックスを付けたMySQLテーブルにファイルをblobとして保存します。これは有望に見えましたが、実際には常にFSよりもはるかに低速でした。多分私はそれを正しくやっていない。
何か案は?