Administro una aplicación que contiene un almacén de archivos en el que todos los archivos se almacenan con los nombres de archivo iguales a sus sumas md5. Todos los archivos se almacenan en un directorio. Actualmente hay miles, pero pronto deberían haber millones de archivos en el servidor. El servidor actual ejecuta Ubuntu 11.10 en un sistema de archivos ext4.
Alguien me dijo que no es aconsejable poner muchos archivos en un directorio, ya que esto creará un aumento significativo en el tiempo de búsqueda y la confiabilidad (tenía una historia sobre los archivos máximos que un único directorio podría señalar, lo que resulta en una gran lista vinculada). En su lugar, sugirió crear subdirectorios con, por ejemplo, subcadenas del nombre del archivo. Sin embargo, esto hará que algunas cosas en mi aplicación sean mucho más engorrosas.
¿Sigue siendo cierto o los sistemas de archivos modernos (por ejemplo, ext4) tienen formas más eficientes de lidiar con esto y escalar naturalmente? Wikipedia tiene algunos detalles sobre los sistemas de archivos, pero en realidad no dice nada sobre los archivos máximos por directorio, o los tiempos de búsqueda.
fuente
Los sistemas de archivos modernos manejan directorios muy grandes muy bien, incluso para millones de archivos. Pero las herramientas convencionales no. Por ejemplo, enumerar un directorio tan grande con "ls" llevaría bastante tiempo ya que normalmente leería todo el directorio y lo ordenaría (aunque puede usar ls -f para evitar la ordenación). No comenzaría a mostrar archivos hasta que se hayan leído todos. La división de los nombres ayuda en algunos casos, pero no en todos (por ejemplo, la replicación de rsync aún podría necesitar recopilar todo el árbol de nombres).
fuente
¿Puedo sugerir usar una base de datos SQL en su lugar? Esto probablemente transformaría esta debilidad percibida en su aplicación en una fortaleza.
fuente