Pregunta

En términos de rendimiento y eficiencia, es mejor utilizar una gran cantidad de archivos pequeños (por lotes me refiero tanto como unos pocos millones de dólares) o un par (diez o más) archivos de gran tamaño (varios gigabytes)? Digamos que estoy construyendo una base de datos (no del todo cierto, pero lo único que importa es que va a ser visitada mucho).

Estoy ocupa principalmente de rendimiento de lectura. Mi sistema de archivos ext3 está actualmente en Linux (Ubuntu Server Edition si importa), a pesar de que estoy en una posición en la que todavía puedo cambiar, por lo que las comparaciones entre los diferentes sistemas de archivos sería fabuloso. Por razones técnicas no puedo utilizar un DBMS reales de este (de ahí la pregunta), por lo que "sólo tiene que utilizar MySQL" no es una buena respuesta.

Gracias de antemano, y quiero saber si tengo que ser más específico.


EDIT: Voy a ser un montón de almacenamiento relativamente pequeñas piezas de datos, razón por la cual el uso de una gran cantidad de archivos pequeños sería más fácil para mí. Así que si iba con el uso de un par de archivos de gran tamaño, que había sólo será la recuperación de unos pocos KB de ellos a la vez. También estaría utilizando un índice, por lo que no es realmente un problema. Además, algunos de los puntos de datos a otras piezas de datos (que sería apuntar al archivo en el caso montón de pequeñas y archivos, y el punto de ubicación de los datos dentro del archivo en el caso-archivos de gran tamaño).

¿Fue útil?

Solución

Hay muchas suposiciones aquí, pero, para todos los intentos y propósitos, buscando a través de un archivo grande será mucho más rápido que buscar a través de un montón de archivos pequeños.

Digamos que usted es buscar una cadena de texto contenida en un archivo de texto. Búsqueda de un fichero 1 TB será mucho más rápido que la apertura de 1.000.000 archivos MB y buscar a través de ellos.

Cada operación de archivo abierto requiere tiempo . Un archivo de gran tamaño sólo tiene que ser abierto de una vez.

Y, al considerar rendimiento del disco , un solo archivo es mucho más probable que sea almacenado contigously de una gran serie de archivos.

... Una vez más, estos son generalizaciones sin saber más acerca de su aplicación específica.

Disfrute,

Robert C. Cartaino

Otros consejos

Depende. De Verdad. Diferentes sistemas de archivos se optimizan de manera diferente, pero en general, los archivos pequeños se embalan de manera eficiente. La ventaja de tener archivos de gran tamaño es que usted no tiene que abrir y cerrar un montón de cosas. apertura y cierre son operaciones que requieren tiempo. Si usted tiene un archivo de gran tamaño, que normalmente se abren y cierran sólo una vez y utiliza operaciones de búsqueda

Si vas para la solución de un montón de Archivos, te sugiero una estructura como

b/a/bar
b/a/baz
f/o/foo

porque tiene límites en el número de archivos en un directorio.

El principal problema aquí es TMO sobre la indexación. Si usted va a buscar información en un archivo enorme y sin un buen índice, usted tiene que escanear todo el archivo de la correcta información que puede ser larga. Si cree que puede construir fuertes mecanismos de indexación, entonces está bien, hay que ir con la enorme archivo.

preferiría delegar esta tarea a ext3 que debe ser bastante bueno en ello.

editar

Una cosa a tener en cuenta de acuerdo con esta Wikipedia artículo sobre ext3 es que la fragmentación ocurre durante hora. Así que si usted tiene un gran número de pequeños archivos que tienen un porcentaje significativo del sistema de archivos, perderá actuaciones con el tiempo.

El artículo también validar la afirmación acerca de los archivos de 32k por límite de directorio (suponiendo un artículo de Wikipedia puede validar cualquier cosa)

Creo Ext3 tiene un límite de unos 32.000 archivos / subdirectorios por directorio. Si vas a los millones de archivos de ruta, que necesita para difundirlas a través de muchos directorios. No sé lo que haría con el rendimiento.

Mi preferencia sería para los varios archivos de gran tamaño. De hecho, ¿por qué tener varios en absoluto, a menos que sean algún tipo de unidades lógicamente independientes? Si sigue dividirlo por el simple hecho de su división, digo que no lo haga. Ext3 puede manejar archivos muy grandes muy bien.

Yo trabajo con un sistema que almacena hasta unos 5 millones de archivos en un sistema de archivos XFS bajo Linux y no han tenido ningún problema de rendimiento. Sólo usamos los archivos para almacenar los datos, nunca completa escanearlos, tenemos una base de datos para buscar y uno de los campos de una tabla contiene un GUID que utilizamos para recuperar. Utilizamos exactamente dos niveles de directorios que el anterior con los nombres de archivo es el GUID, aunque se podrían utilizar más si el número de archivos se hizo aún más grande. Elegimos este enfoque para evitar el almacenamiento de unos pocos terabytes adicionales en la base de datos que sólo necesitaba ser almacenado / regresado y nunca buscó a través y ha funcionado bien para nosotros. Nuestros archivos van desde 1k hasta alrededor de 500 k.

También hemos ejecutar el sistema con ext3, y funcionado bien, aunque no estoy seguro de si alguna vez empujamos pasado aproximadamente un millón de archivos. Probablemente tendríamos que ir a un sistema de 3 directorio debido a los archivos máximos por limitaciones de directorio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top