Ich habe einen Webserver, der Cache-Dateien speichert und sie für 7 Tage hält. Die Dateinamen sind md5 Hashes, das heißt genau 32 Hex-Zeichen lang, und werden in einer Baumstruktur gehalten, die wie folgt aussieht:Umgang mit vielen temporären kleinen Dateien
00/
00/
00000ae9355e59a3d8a314a5470753d8
.
.
00/
01/
Sie bekommen die Idee.
Mein Problem ist, dass das Löschen alter Dateien sehr lange dauert. Ich habe einen täglichen Cron Job, der
find cache/ -mtime +7 -type f -delete
läuft, die mehr als einen halben Tag dauert, um abzuschließen. Ich mache mir Sorgen über die Skalierbarkeit und die Auswirkungen auf die Leistung des Servers. Außerdem ist das Cache-Verzeichnis jetzt ein schwarzes Loch in meinem System und fängt die gelegentlichen unschuldigen du
oder find
ein.
Die Standardlösung für den LRU-Cache ist eine Art Heap. Gibt es eine Möglichkeit, dies auf Dateisystemebene zu skalieren? Gibt es eine andere Möglichkeit, dies so zu implementieren, dass es einfacher zu verwalten ist?
Hier sind Ideen, die ich in Betracht gezogen:
- 7 Top-Verzeichnisse erstellen, eine für jeden Wochentag und leere ein Verzeichnis jeden Tag. Dies erhöht die Suchzeit für eine Cache-Datei um das 7-fache, macht es wirklich kompliziert, wenn eine Datei überschrieben wird, und ich bin mir nicht sicher, was es mit der Löschzeit machen wird.
- Speichern Sie die Dateien als Blobs in einer MySQL-Tabelle mit Indizes für Name und Datum. Dies schien vielversprechend, aber in der Praxis war es immer viel langsamer als FS. Vielleicht mache ich es nicht richtig.
Irgendwelche Ideen?
Bugger :) Sie haben mich dazu geschlagen. +1 diese Antwort. –
Stellen Sie sicher, dass Sie die Originaldatei und den Link entfernen. Sie wollen nicht viele tote Links dort, und es ist auch einfach, den Link zu entfernen und nicht die ursprüngliche Datei zu entfernen. –