我有一个网络服务器,它保存缓存文件并将它们保留 7 天。文件名是 md5 哈希值,即恰好 32 个十六进制字符长,并保存在如下所示的树结构中:
00/
00/
00000ae9355e59a3d8a314a5470753d8
.
.
00/
01/
你明白了。
我的问题是删除旧文件需要很长时间。我有一个每天运行的 cron 作业
find cache/ -mtime +7 -type f -delete
这需要半天多的时间才能完成。我担心可伸缩性及其对服务器性能的影响。此外,缓存目录现在是我系统中的一个黑洞,偶尔会捕获无辜的 du
或 find
。
LRU 缓存的标准解决方案是某种堆。有没有办法将其扩展到文件系统级别? 有没有其他方法可以更轻松地管理它?
以下是我考虑过的想法:
- 创建 7 个顶级目录,每周一个,每天清空一个目录。这将缓存文件的查找时间增加了 7 倍,使文件被覆盖时变得非常复杂,而且我不确定它会对删除时间造成什么影响。
- 将文件保存为 MySQL 表中的 blob,并在名称和日期上建立索引。这看起来很有希望,但实际上它总是比 FS 慢得多。也许我做得不对。
有什么想法吗?
最佳答案
当你存储一个文件时,建立一个指向第二个目录结构的符号链接(symbolic link),这个目录结构是按日期组织的,而不是按名称组织的。
使用“名称”结构检索您的文件,使用“日期”结构删除它们。
关于linux - 处理大量临时小文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/258212/