2010-06-08 13 views
15

Duplicar posible:
How many files in a directory is too many?¿Cuántos archivos en un directorio son demasiados (en Windows y Linux)?

me dijeron que poner demasiados archivos en un directorio puede causar problemas de rendimiento en Linux y Windows. ¿Es esto cierto? Y si es así, ¿cuál es la mejor manera de evitar esto?

+0

¿Problemas de rendimiento al intentar hacer qué? –

+2

Esta pregunta es como "¿cuántos usuarios o procesos son demasiados?". Se basa completamente en el contexto, la actividad y su definición de "demasiado". La respuesta es probable entre 100 y 10 millones. – msw

+0

duplicado: http://stackoverflow.com/questions/466521/how-many-files-in-a-directory-is-too-many http://stackoverflow.com/questions/197162/ntfs-performance-and- large-volumes-of-files-and-directories – leonbloy

Respuesta

10

De acuerdo con this Microsoft article, el tiempo de búsqueda de un directorio aumenta proporcionalmente al cuadrado de la cantidad de entradas. (Aunque eso fue un error contra NT 3.5.)

Se formuló una pregunta similar en el Old Joel on Software Forum. Una respuesta fue que el rendimiento parece bajar entre 1000 y 3000 archivos, y un cartel alcanzó un límite estricto en 18000 archivos. Todavía otra publicación afirma que son posibles 300,000 archivos, pero los tiempos de búsqueda disminuyen rápidamente a medida que se agotan los nombres de los archivos 8.3.

Para evitar grandes directorios, cree uno, dos o más niveles de subdirectorios y agregue los archivos a esos. El tipo más simple de hash usa las letras del nombre del archivo. Por lo tanto, un archivo que inicie abc0001.txt se colocará como \ b \ c \ abc0001.txt, suponiendo que elija 3 niveles de anidación. 3 es probablemente excesivo: usar dos caracteres por directorio reduce el número de niveles de anidación. p.ej. ab\abc0001.txt. Solo necesitará ir a dos niveles de anidación si anticipa que cualquier directorio tendrá mucho más que ca. 3000 archivos.

+0

Mi propia experiencia con dos niveles de subdirectorios de anidamiento A-Z + 0-9 en un servidor de red es problemática. Por alguna razón, Windows parece demorar una eternidad en enumerar los archivos, aunque cada subdirectorio contiene aproximadamente 10 archivos o menos. –

+0

Puedo confirmar que puede obtener cerca de 250,000 archivos por carpeta en NTFS. En realidad, no es tan lento como pensarías si ajustas la configuración del explorador de Windows. –

8

El sistema de archivos de Windows es actualmente NTFS. La cantidad máxima de archivos en un volumen es 4,294,967,295. La catalogación de archivos en la unidad se lleva a cabo en un Árbol B + que le proporciona una búsqueda de Log (N).

En el antiguo FAT32 había un límite de 64K archivos en una carpeta. La indexación también fue hecha por una lista por carpeta, por lo tanto, después de un par de miles de rendimiento se redujo drásticamente. Probablemente no necesite preocuparse por FAT32, a menos que su audiencia tenga DOS, Windows 95,98 o Millenium (Yuck).

En Linux, realmente depende del sistema de archivos que está utilizando (podría ser NTFS si así lo decide) extf3 tiene una limitación de 32k archivos por directorio. La búsqueda también es B + Tree y le dará la búsqueda LOG (N)

Después de analizar esto más a fondo, su pregunta debería ser realmente sobre las limitaciones de los sistemas de archivos.

+3

Si él quisiera saber las limitaciones difíciles, eso es lo que habría preguntado.Existen limitaciones "suaves" en las que el rendimiento no es el ideal, y se encontrará con estos límites suaves mucho antes de que llegue a los límites estrictos. –

Cuestiones relacionadas