2010-09-12 19 views
11

Recientemente he estado involucrado en el manejo de los registros de la consola de un servidor y me preguntaba, por curiosidad, que hay un problema de rendimiento al escribir en un archivo grande en comparación con los pequeños.¿Problemas de rendimiento al escribir en archivos de gran tamaño?

Por ejemplo, es una buena idea mantener el tamaño del archivo de registro pequeño en lugar de dejar que se vuelvan voluminosos, pero no pude argumentar mucho a favor de cualquiera de los enfoques.

Puede haber problemas para leer o buscar en el archivo, pero ahora estoy más interesado en saber si la escritura puede verse afectada de alguna manera. Buscando un consejo experto.

Edit: La forma en que pensé que era que el sistema operativo solo tiene que abrir un identificador de archivo y enviar los datos al sistema de archivos. Existe una pequeña correlación con el tamaño del archivo, ya que debe seguir adjuntando los datos al final del archivo y siempre que un bloque de datos esté lleno, OS asignará otro bloque al archivo. Como dije antes, puede haber problemas de lectura y búsqueda debido a la desfragmentación de los bloques de archivos, pero no pude encontrar mucha diferencia mientras escribía.

+2

Si está utilizando ext u otro sistema de archivos de Unix/Linux moderna, a continuación, llenar su disco con archivos de registro (adjuntos), es sobre el único caso de uso que causará que su sistema de archivos se fragmente (si está en las ventanas de Microsoft, entonces ignore esto, casi todos los casos de uso (que tengan concurrencia o eliminación) hará que su sistema de archivos se fragmente). Para mitigar esta fragmentación, rotar y comprimir sus archivos de registro (use una herramienta de rotación de registros para esto). comprimir no solo reducirá el tamaño del archivo, sino que también lo eliminará. –

Respuesta

8

Como regla general, no debe haber ninguna diferencia práctica entre agregar un bloque a un archivo pequeño (o escribir el primer bloque que se agrega a un archivo de longitud cero) o agregar un bloque a un archivo grande.

Hay casos especiales (como intentar fallar en un bloque triple-indirecto o el inicial abierto tener que leer toda la información de asignación) que podrían agregar E/S adicionales. pero el estado estacionario debería ser el mismo.

estaría más preocupado por la capacidad de gestión de archivos de gran tamaño que tiene: lento para copia de seguridad, copiar lenta, lenta para ver, etc.

1

No soy un experto, pero intentaré responder de todos modos.

Los archivos de mayor tamaño pueden tardar más en escribir en el disco y, de hecho, no es un problema de programación. Es un problema del sistema de archivos. Quizás haya sistemas de archivos que no tengan tales problemas, pero en Windows los archivos grandes no se pueden escribir de una sola pieza, por lo que fragmentarlos llevará tiempo (por la simple razón de que la cabeza tendrá que pasar a otro cilindro). Suponiendo que estamos hablando de discos duros "clásicos" ...

Si quiere un consejo, me gustaría escribir archivos más pequeños y rotarlos a diario o cuando alcanzan algún tamaño (o ambos en realidad). Ese es un enfoque bastante común que vi en productos de grado empresarial.

+0

La forma en que pensé que era que el sistema operativo solo tiene que abrir un identificador de archivo y enviar los datos al sistema de archivos. Existe una pequeña correlación con el tamaño del archivo, ya que debe seguir adjuntando los datos al final del archivo y siempre que un bloque de datos esté lleno, OS asignará otro bloque al archivo. – Ashish

Cuestiones relacionadas