Nuestro equipo de trabajo ha pasado mucho tiempo investigando respuestas a tus preguntas, te brindamos la solución por esto deseamos servirte de mucha apoyo.
Solución:
Esto puede ser un problema X/Y. Quizás lo que está haciendo es más adecuado para una base de datos que para un sistema de archivos. Con una base de datos, puede fácilmente almacenar y acceder a muchos millones de registros de forma rápida y eficiente. La respuesta aceptada es correcta al decir que NTFS teóricamente puede almacenar tantos registros, pero no será muy rápido. Este es true para prácticamente todos los sistemas de archivos (por ejemplo, NTFS, exFAT, ext4, HFS…). Simplemente no están diseñados para ser lo suficientemente escalables para lo que está tratando de hacer.
Una de las razones principales de esto es que la API del sistema de archivos de la mayoría de los sistemas operativos solo puede devolver la lista completa de entradas de directorio a la vez. No hay forma de recuperar solo directorios que coincidan con un cierto patrón en los sistemas de archivos típicos, por ejemplo. Habría que recuperarlos todos y entonces analice la salida (masiva) para los nombres que desea. lo mismo es true con otro archivo/directorio attributes además de nombre como tamaño, hora de creación y modificación, etc. No es el caso de las bases de datos.
En cuanto a las capacidades teóricas de NTFS, no hay problema.
El artículo de Microsoft sobre Tamaños máximos en un volumen NTFS especifica que el máximo de archivos por volumen es 4.294.967.295 y que también debería ser el máximo en carpetas. Sin embargo, necesitaría una computadora extremadamente rápida con mucha RAM para poder ver esa carpeta en Explorer.
Según mi propia experiencia, en una buena computadora de hace varios años, ver una carpeta con miles de subcarpetas tomó una docena de segundos solo para mostrar la carpeta. No tengo idea de lo que sucedería con 10 millones de subcarpetas, pero seguramente necesitarías mucha paciencia incluso si la computadora pudiera manejarlo. Eventualmente.
Realmente sugiero repensar nuevamente la arquitectura de su carpeta.
El número de archivos dentro de una carpeta ha nada que ver con el sistema operativo. Es una característica de la sistema de archivos aunque el sistema que utilices puede a su vez tener menores limitaciones. Algunos sistemas de archivos limitan la cantidad de archivos en una carpeta, pero otros simplemente limitan la cantidad total de archivos en un volumen, y algunos no tienen ningún límite. Consulte los límites de los sistemas de archivos. Tenga en cuenta que, básicamente, un directorio es solo un archivo cuyo contenido es una lista de otros archivos
Si usa exFAT, el número máximo es 2 796 202 archivos por carpeta. En NTFS el límite es 232-1 archivos por volumen. Y si usa FAT, el límite depende de la versión FAT
- FAT12: 4 068 para clústeres de 8 KiB
- FAT16: 65 460 para clústeres de 32 KiB
- FAT32: 268 173 300 para clústeres de 32 KiB
Windows también admite de forma nativa algunos otros sistemas de archivos como ReFS, o puede instalar controladores para otros sistemas de archivos no nativos. A su vez pueden tener diferentes límites
Pero en todo caso tener una gran cantidad de archivos en una carpeta es una muy mala idea. La velocidad de listado y operación depende de cómo el sistema de archivos almacena sus metadatos, por ejemplo, en FAT es una lista lineal, por lo que es muy lenta. Pero incluso con una forma eficiente de enumerar archivos como un árbol B+ en NTFS, sigue siendo lento. En general evito tener más de 2000 archivos en una carpeta
La mejor solución en su caso debería ser algún tipo de base de datos. Sin embargo, si usted De Verdad tiene que almacenar los archivos directamente en una unidad, entonces necesita distribuir los archivos de manera uniforme en varias carpetas más pequeñas. La forma común es convertir el nombre o el contenido del archivo en hash y dividirlo en carpetas que tengan parte de ese nombre. Por ejemplo, si el hash es 0xabcdef12
(32 bits) luego almacene el archivo en ab/cd/ef/12
, ab/cde/f12
o 2af/0de/f12
(cada componente de ruta representa 8/8/8/8, 8/12/12 y 10/10/12 bits del valor original respectivamente). De esta manera, ninguna carpeta debería tener demasiados o muy pocos archivos. Ver
- ¿Cómo difundir/deshacer varios archivos en el disco sin almacenar más de 1000 por directorio?
- Almacenar un millón de imágenes en el sistema de archivos
- Accediendo a miles de archivos en hash de directorios
Este método se usa comúnmente en git o docker
Ver también
- ¿Es malo si se almacenan millones de archivos en una carpeta NTFS?
- Implicaciones de rendimiento de almacenar más de 600 000 imágenes en la misma carpeta (NTFS)
- ¿Puede disminuir el rendimiento del sistema de archivos si hay una gran cantidad de archivos en un solo directorio (NTFS)?
- ¿Tiene 1 millón de carpetas o tiene 1 millón de archivos en una carpeta?
- ¿Cuántos archivos puede poner en una carpeta de Windows sin una degradación notable del rendimiento?
- Rendimiento NTFS y grandes volúmenes de archivos y directorios
- ¿Cómo lidias con muchos archivos pequeños?
- Millones de pequeños archivos gráficos y cómo superar el acceso lento al sistema de archivos en XP
- ¿Cuántos archivos en un directorio son demasiados (en Windows y Linux)? (duplicar)
- Millones de (pequeños) archivos de texto en una carpeta
- Rendimiento asociado con el almacenamiento de millones de archivos en NTFS
Aquí puedes ver las reseñas y valoraciones de los lectores
Nos puedes respaldar nuestra labor exponiendo un comentario o puntuándolo te damos las gracias.