25 votos

Número máximo de archivos en una ext3 directorio mientras sigue recibiendo un rendimiento aceptable?

Tengo una aplicación de escritura a ext3 directorio que con el tiempo ha crecido a cerca de tres millones de archivos. Huelga decir que, de la lectura de la lista de archivos de este directorio es insoportablemente lento.

No culpo a ext3. La solución adecuada habría sido dejar que el código de la aplicación de escritura a los sub-directorios, tales como ./a/b/c/abc.ext en lugar de utilizar sólo ./abc.ext.

Me voy a cambiar a una sub-estructura de directorios y mi pregunta es sencilla: ¿qué archivos debo esperar para almacenar en una ext3 directorio mientras sigue recibiendo un rendimiento aceptable? ¿Cuál es tu experiencia?

O en otras palabras, suponiendo que necesito almacenar tres millones de archivos en la estructura, cómo muchos niveles de profundidad si el ./a/b/c/abc.ext estructura?

Obviamente esta es una pregunta que no puede responderse exactamente, pero estoy buscando a un parque de pelota de la estimación.

12voto

Ignacio Vazquez-Abrams Puntos 30600

Siempre que tenga una distro que apoya la dir_index de la capacidad, a continuación, usted puede fácilmente tener 200.000 archivos en un solo directorio. Me gustaría mantener a cerca de 25.000 aunque, sólo para estar seguro. Sin dir_index, trate de mantener a 5.000.

10voto

Sean Reifschneider Puntos 4951

Ser MUY cuidadoso en la forma de seleccionar el directorio de división. "a/b/c" suena como una receta para el desastre para mí...

No sólo ciegamente ir haciendo varias directorio de estructura profunda, digamos 100 entradas en el primer nivel, 100 entradas en el segundo nivel, 100 entradas en el tercero. Yo he estado allí, hecho que, tengo la chaqueta y tuvo que reestructurar cuando el rendimiento fue en el crapper con un par de millones de archivos. :-)

Tenemos un cliente que hizo la "varios directorios" diseño, y termina el solo hecho de poner de uno a cinco archivos por directorio, y este estaba matando. De 3 a 6 horas para hacer un "du" en esta estructura de directorios. El salvador aquí fue SSD, que no estaban dispuestos a reescribir esta parte de su solicitud, y un SSD tomó esta du tiempo de horas a minutos.

El problema es que cada nivel de búsquedas en el directorio toma busca, y busca son extremadamente caros. El tamaño del directorio es también un factor importante, por lo que tener que ser más pequeñas en lugar de grandes es una gran victoria.

Para responder a su pregunta acerca de cómo muchos archivos por directorio de 1.000 he oído hablado como "óptimo" pero el rendimiento en los 10.000 parece estar bien.

Así, lo que yo recomendaría es un nivel de directorios, cada nivel de ser un directorio de 2 caracteres de largo, compuesta de letras mayúsculas y minúsculas, y los dígitos, por alrededor de 3800 directorios en el nivel superior. Usted puede, a continuación, mantenga 14M archivos con los sub-directorios que contienen 3800 archivos, o alrededor de 1.000 archivos por sub-directorio de 3M archivos.

He hecho un cambio como este para otro cliente, y se hizo una gran diferencia.

6voto

David Gelhar Puntos 191

Le sugiero que trate de probar varias directorio de tamaños con una herramienta de referencia, tales como del matasellos, porque hay un montón de variables como el tamaño de la caché (tanto en el sistema operativo y en el subsistema de disco) que dependen de su entorno en particular.

Mi personal regla de oro es apuntar a un directorio de tamaño de <= 20k archivos, aunque he visto relativamente decente rendimiento con hasta 100 mil archivos/directorios.

3voto

Amy B Puntos 143

Tengo todos los archivos de las carpetas como:

uploads/[fecha]/[hora]/yo.png

y no tiene problemas de rendimiento.

2voto

bradlis7 Puntos 208

http://en.wikipedia.org/wiki/Ext3#Functionality - Este menciona que un directorio sólo puede tener aproximadamente 32000 subdirectorios, pero no hace mención de los archivos.

http://roopindersingh.com/2008/05/10/ext3-handling-large-number-of-files-in-a-directory/

También, odio los Expertos de Intercambio, pero he leído un comentario en esta pregunta que lo ideal es tener menos de 10 a 15,000 por cada directorio.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: