2012-02-19 44 views
5

Tengo carpetas NTFS que pueden crecer para contener de 100,000 a 1,000,000 de archivos, el límite superior discutido en este answer on NTFS performance.¿La longitud del nombre de un archivo afecta los enormes índices de carpetas NTFS?

Mis archivos tienen las siguientes características:

1) tienen nombres de archivo largos (típicamente de 64 a 100 caracteres).

2) Para muchos de los archivos, la parte principal de los nombres de archivo puede ser idéntica para los primeros 20 a 40 caracteres.

¿Los nombres de archivo largos afectan el rendimiento del índice de carpetas NTFS, ya sea al buscar el registro de un archivo a partir de su nombre, la fragmentación del índice o el crecimiento del índice?

Los índices de carpetas NTFS son (según los informes) B-trees. He probado mi software en 50,000 archivos, pero estoy ejecutando una prueba de 'ruta feliz', con poca rotación del sistema de archivos. Probar hasta 1,000,000 llevará semanas ejecutar mi software sin parar.

He considerado escribir un simulador, pero antes de hacerlo, ¿alguien tiene experiencia en el mundo real con esto?

+0

¿Por qué crees que las pruebas a millones tardarían semanas? Puede crear una prueba sintética que realice operaciones esperadas en un millón de archivos, y tomará más tiempo escribir la prueba que ejecutarla. –

+0

No pensaría en nombres de archivos de 64 a 100 caracteres como nombres de archivo largos, de todos modos. – dmeister

+0

De este artículo http://support.microsoft.com/kb/130694 parece que el rendimiento puede verse obstaculizado si tiene habilitada la compatibilidad con el nombre de archivo 8.3 anterior. – NothingMore

Respuesta

1

Los directorios NTFS son BTrees con datos tanto en el interior como en los nodos hoja. Como no hay ninguna "compresión de prefijo clave", el texto completo del nombre de archivo también se almacena en los nodos.

Buscar esto con nombres de archivo de prueba que tienen muchos caracteres de prefijo idénticos simplemente desperdicia tiempo, ya que al examinar cada "página" del directorio se realizan muchas comparaciones idénticas antes de encontrar los caracteres distintivos. Si puede hacer que el personaje más a la izquierda del nombre sea la variable más grande, sería una gran ayuda.

Pero, al final, ningún sistema de archivos es una buena base de datos y ninguna base de datos es un buen sistema de archivos.Debe considerar los tamaños de sus archivos y las características de uso esperadas.

2

NTFS normalmente actualiza el atributo de un archivo en el disco si la corriente Last Access Time en la memoria difiere por más de una hora de la Last Access Time almacenada en el disco, o cuando todas las referencias en memoria a este archivo ha desaparecido, lo que es más reciente. Por lo que deshabilitar el Last Access Time mejora la velocidad de acceso a carpetas y archivos.

Al guardar un archivo con un nombre de archivo largo a una unidad NTFS, NTFS crea, por defecto, una segunda entrada de directorio archivo con un nombre de archivo corto arreglo a la convención 8.3. Cuando NTFS enumera archivos en un directorio, tiene que buscar los nombres 8.3 asociados con los nombres de archivo largos. Debido a que un directorio NTFS se mantiene en un estado ordenado, los nombres de archivo largos correspondientes y los nombres 8.3 generalmente no se encuentran uno al lado del otro en la lista del directorio. Por lo tanto, NTFS usa una búsqueda lineal del directorio para cada archivo presente. Como resultado, la cantidad de tiempo requerida para realizar una lista de directorios aumenta con el cuadrado del número de archivos en el directorio. Desactivar la creación del archivo 8.3 también mejorará el rendimiento.

Dos claves de registro debe ser cambiado: NtfsDisable8dot3NameCreation y NtfsDisableLastAccessUpdate, defina sus valores a 1.

Y, si se lo puede permitir, utilice unidad de estado sólido (SSD) en lugar de disco duro tradicional, debido a que la el rendimiento es en magnitud mejor, ver aquí http://en.wikipedia.org/wiki/Solid-state_drive#Comparison_of_SSD_with_hard_disk_drives.

Cuestiones relacionadas