Acabo de agregar una función de búsqueda predictiva (ver ejemplo a continuación) a mi sitio que se ejecuta en un servidor Ubuntu. Esto se ejecuta directamente desde una base de datos. Quiero almacenar en caché el resultado para cada búsqueda y usarlo si existe, de lo contrario crearlo.
¿Habría algún problema conmigo guardando los posibles resultados de 10 millones de cira en archivos separados en un directorio? ¿O es aconsejable dividirlos en carpetas?
Ejemplo:
os.listdir
en Python fue denegada por esta razón.Respuestas:
Si. Probablemente haya más razones, pero estas puedo publicarlas en la parte superior de mi cabeza:
tune2fs
tiene una opción llamadadir_index
que tiende a encenderse de manera predeterminada (en Ubuntu lo es) que le permite almacenar aproximadamente 100k archivos en un directorio antes de ver un impacto en el rendimiento. Eso ni siquiera está cerca de los 10 millones de archivos en los que está pensando.ext
Los sistemas de archivos tienen un número máximo fijo de inodes. Cada archivo y directorio usa 1 inodo. Úselodf -i
para una vista de sus particiones e inodos libres. Cuando te quedas sin inodos no puedes crear nuevos archivos o carpetas.comandos como
rm
yls
cuando se usan comodines expanden el comando y terminarán con una "lista de argumentos demasiado larga". Tendrá que usarfind
para eliminar o enumerar archivos. Yfind
tiende a ser lento.Si. Definitivamente. Básicamente, ni siquiera puede almacenar archivos de 10 m en 1 directorio.
Yo usaría la base de datos. Si desea almacenarlo en caché para un sitio web, eche un vistazo a " solr " ("proporcionar indexación distribuida, replicación y consulta de carga equilibrada").
fuente
Terminé con el mismo problema. Ejecute mis propios puntos de referencia para averiguar si puede colocar todo en la misma carpeta en lugar de tener varias carpetas. ¡Parece que puedes y es más rápido!
Ref: https://medium.com/@hartator/benchmark-deep-directory-structure-vs-flat-directory-structure-to-store-millions-of-files-on-ext4-cac1000ca28
fuente
Una búsqueda binaria puede manejar fácilmente millones de registros, por lo que buscar en un solo directorio no sería un problema. Lo hará muy rápido.
Básicamente, si está utilizando un sistema de 32 bits, la búsqueda binaria de registros de hasta 2 Gb es fácil y buena.
Berekely DB, un software de código abierto, le permitirá almacenar fácilmente el resultado completo en una sola entrada y tendrá la búsqueda integrada.
fuente