Saludos,
Estoy escribiendo algunos scripts para procesar imágenes de varios sitios web de fotos. En este momento estoy almacenando todos estos datos en archivos de texto individuales en el mismo directorio.
El directorio es accesible desde la web. Un usuario final realiza una llamada a un servicio web que devuelve la ruta al archivo que necesitará el usuario.
Me preguntaba en qué etapa vería un impacto en el rendimiento al tener todos estos archivos en el mismo directorio. (Si alguna)
Respuestas:
El rendimiento varía según el sistema de archivos que esté utilizando.
EXT3: el límite físico es de 32,000 archivos, pero el rendimiento sufre después de varios miles de archivos también.
EXT4: teóricamente ilimitado
ReiserFS, XFS, JFS, BTRFS: estos son los buenos para muchos archivos en un directorio, ya que son más modernos y están diseñados para manejar muchos archivos (los otros fueron diseñados en los días en que los discos duros se midieron en MB no GB) . El rendimiento es mucho mejor para muchos archivos (junto con ext4) ya que ambos usan un algoritmo de tipo de búsqueda binaria para obtener el archivo que deseas (los otros usan uno más lineal).
fuente
Almaceno imágenes para servir en un servidor web, y tengo más de 300,000 imágenes en un directorio en EXT3. No veo problemas de rendimiento. Antes de configurar esto, hice pruebas con 500k imágenes en un directorio y accedí al azar a los archivos por nombre, y no hubo una desaceleración significativa con 500k sobre 10k imágenes en el directorio.
El único inconveniente que veo es que para sincronizar los nuevos con un segundo servidor, tengo que ejecutar
rsync
todo el directorio, y no puedo simplemente decirle que sincronice un subdirectorio que contiene los más recientes miles.fuente
La cantidad de archivos en una carpeta podría ser teóricamente ilimitada. Sin embargo, cada vez que el sistema operativo acceda a la carpeta específica para buscar archivos, tendrá que procesar todos los archivos de la carpeta. Con menos de 500 archivos, es posible que no note demoras. Pero cuando tiene decenas de miles de archivos en una sola carpeta, un simple comando de lista de carpetas (ls o dir) podría tomar demasiado tiempo. Cuando se puede acceder a estas carpetas a través de FTP, realmente será demasiado lento ...
Los problemas de rendimiento no dependerán realmente de su sistema operativo, sino de la velocidad del procesador del sistema, las capacidades de disco y la memoria. Si tiene tantos archivos, puede combinarlos en un solo archivo y usar un sistema de archivo que esté optimizado para almacenar muchos datos. Esto podría ser un archivo ZIP, pero mejor aún, almacénelos como blobs en una base de datos con el nombre del archivo como clave principal.
fuente
ls
es un problema.Mi regla de oro es dividir las carpetas si hay más de 1000 archivos y la carpeta se examinará (es decir, a través de Internet o Explorer) o 5000 archivos de lo contrario.
fuente
Como señala @skaffman, los límites dependen del sistema operativo. Es probable que se vea afectado por los límites de los sistemas operativos más antiguos. Recuerdo que una versión anterior de Solaris estaba limitada a 32768 archivos por directorio.
La solución habitual es usar algún tipo de hash, es decir, el servidor Cyrus imap divide a los usuarios por un hash alfabético:
fuente
Si está accediendo directamente a un archivo, el número de archivos en un directorio no es un problema de velocidad.
La cantidad de archivos que puede crear en un solo directorio depende del sistema de archivos que esté utilizando. Si está enumerando todos los archivos en el directorio o está buscando, ordenando, etc., tener muchos archivos ralentizará esas operaciones.
gbjbaanb está equivocado en su respuesta sobre el tamaño máximo de archivo de ext3. En general, ext limita el número de archivos en su disco en general. No puede crear más archivos, entonces tiene inodes en su tabla de inodes. Tiene razón al sugerir reiserfs para obtener más rendimiento con muchos archivos
fuente
Carpeta marcada con archivos de 10K en NTFS (Windows 7, 64 bit). La carpeta con imágenes de 10K en cualquier vista (Lista, Icono, etc.) funciona y se desplaza sin ningún retraso sensible.
fuente