Tengo un servidor web que guarda los archivos de caché y los mantiene durante 7 días. Los nombres de archivo son hashes MD5, es decir, exactamente 32 caracteres hexadecimales de largo, y se mantienen en una estructura de árbol que se parece a esto:manejo de un montón de pequeños archivos temporales
00/
00/
00000ae9355e59a3d8a314a5470753d8
.
.
00/
01/
Usted consigue la idea.
Mi problema es que la eliminación de archivos antiguos está llevando mucho tiempo. Tengo un trabajo cron diario que ejecuta
find cache/ -mtime +7 -type f -delete
que toma más de medio día completar. Me preocupa la escalabilidad y el efecto que esto tiene en el rendimiento del servidor. Además, el directorio de la memoria caché ahora es un agujero negro en mi sistema, atrapando a los ocasionales inocentes du
o find
.
La solución estándar para el caché LRU es una especie de montón. ¿Hay alguna manera de escalar esto al nivel del sistema de archivos? ¿Hay alguna otra forma de implementar esto de forma que sea más fácil de administrar?
Estas son las ideas que yo consideraba:
- Crear 7 directorios principales, uno para cada día de la semana y un directorio vacío todos los días. Esto aumenta el tiempo de búsqueda para un archivo de caché 7 veces, lo hace realmente complicado cuando se sobrescribe un archivo, y no estoy seguro de lo que hará con el tiempo de eliminación.
- Guarde los archivos como blobs en una tabla MySQL con índices de nombre y fecha. Esto parecía prometedor, pero en la práctica siempre ha sido mucho más lento que FS. Tal vez no lo estoy haciendo bien.
¿Alguna idea?
Bugger :) Me ganaste. +1 esta respuesta. –
Solo asegúrese de eliminar tanto el archivo original como el enlace. No querrás muchos enlaces muertos allí, y también es fácil eliminar el enlace y no eliminar el archivo original. –