3 votos

Pruebas de escritura de disco

Estoy escribiendo una aplicación para almacenar gran cantidad de imágenes (tamaño <5 MB) en un sistema de ficheros ext3, esto es lo que tengo por ahora. Después de algunas búsquedas, aquí en serverfault he decidido por una estructura de directorios como estos:

000/000/000000001.jpg
...
236/519/236519107.jpg

Esta estructura me permite guardar hasta 1'000'000'000 de imágenes como voy a almacenar un máximo de 1'000 imágenes en cada hoja.

He creado, desde un punto de vista teórico parece bien a mí (aunque no tengo experiencia en esto), pero quiero saber qué va a pasar cuando no se directorios completo de los archivos de allí.

Una pregunta acerca de la creación de esta estructura: es lo mejor para crear todo de una sola vez (tarda aproximadamente 50 minutos en mi pc) o debo crear directorios, ya que se necesitaban? De un desarrollador punto de vista creo que la primera opción es mejor (sin tiempo de espera para el usuario), pero a partir de un sysadmin punto de vista, es correcto esto?

He pensado que yo podía hacer como si el sistema de ficheros está ya en virtud de la aplicación en ejecución, voy a hacer un script que se va a guardar las imágenes tan rápido como puede, el monitoreo de las cosas de la siguiente manera:

  • cuánto tiempo se tarda para que una imagen se guarda cuando no hay o poco espacio utilizado?
  • ¿cómo afecta este cambio cuando el espacio comienza a ser utilizadas?
  • cuánto tiempo se tarda para que una imagen se lee de un azar de la hoja? ¿Esto cambia mucho cuando hay un montón de archivos?

¿El lanzamiento de este comando

sync; echo 3 | sudo tee /proc/sys/vm/drop_caches

tiene algún sentido? Es esta la única cosa que tengo que hacer para tener un inicio limpio si quiero empezar de nuevo con mis pruebas?

¿Tiene alguna sugerencia o corrección?

EDIT: he hecho el sistema de ficheros elección, se opuso a la base de datos, porque de esta dos preguntas:

2voto

pehrs Puntos 6831

Primero de todo, tener cuidado con las limitaciones del sistema de archivos. Usted nunca va a almacenar más de 2^32 archivos en una vainilla sistema de archivos EXT3, ya que hay un límite en el número máximo de nodos i (marque df -i). Además de esto, puede haber un máximo de FS límites de tamaño y tal a considerar.

En segundo lugar: ¿usted realmente necesita tener los archivos en el sistema de ficheros? Dependiendo de cómo se accede a los archivos que usted podría encontrar que usted consigue mejor (y mucho más predecible) rendimiento por poner los archivos en una base de datos. En adición a esto, las bases de datos son mucho más fáciles de manejar, de copia de seguridad, mover, etc. Cualquier aplicación de diseño que involucra a millones de archivos es defectuosa y volverá a morder duro en el futuro.

1voto

sysadmin1138 Puntos 86362

Pehrs plantea un muy buen punto sobre sistemas de archivos con el que muchos de los archivos. Cuando llegue el momento de la copia de seguridad de ese sistema de archivos va a tomar un tiempo MUY largo. Archivo-traversal, es uno de los que más tiempo-chupa durante un proceso de copia de seguridad, haga lo largo de todos los archivos abiertos/archivo-cerrar las solicitudes. La pregunta, "¿cuánto tiempo se tarda para que una imagen se guarda cuando no hay o poco espacio utilizado?" sugiere que estos archivos son bastante pequeñas, por lo que un sistema de este tipo es casi de libro de texto para las peores escenarios de copia de seguridad (uno de los casos es peor: todos los archivos en un solo directorio).

En contraste con una verdadera base de datos, donde volcar la base de datos para copia de seguridad es muy rápida, eficiente operación. Sí, esa base de datos puede ser MUY grande, pero va de copia de seguridad MUCHO más rápido, y puede incluso servir a los datos más rápido que el archivo de conteo crece. Se puede depender de lo que DB de usar y de lo bien que se logró, pero en general el uso de una base de datos de la tienda en lugar de un FS de la tienda, en este caso, proporcionará una mejor resiliencia a los desastres.

Si un DB no es una opción, entonces sí, la pre-creación de la estructura de directorios es su mejor apuesta. Lo que también ayuda es de equilibrio de carga el archivo que se crea a través de toda la estructura y no sólo ir hasta /000/000/ se llena antes de pasar a /000/001/. Esto debería asegurar que el archivo de cuentas por los directorios siguen siendo bajos durante bastante tiempo.

1voto

mreggen Puntos 2940

¿ No cree todos ellos en el inicio.

Crear el nivel superior 1k dirs si te gusta, pero más allá de los que las hacen en la demanda. De lo contrario, la creación de todos ellos va a comer un montón de su sistema de ficheros del inodos que lo más probable es que nunca se utiliza.

Tener en cuenta: 1 inodo es consumida por el directorio creado (inodes mantener los permisos y la propiedad de la información, tanto para los archivos y directorios). Para el nivel superior 1000 directorios es... 1000 inodes. El siguiente nivel es de 1000*1000 o 1000000 de inodos. Un millón, que incluso hoy en día en los grandes discos no es una cantidad despreciable. Si usted llena una unidad de 1 tb con 5 mb de archivos, que... 200k de archivos. Usted va a gastar más inodos en la estructura de directorios que en los propios archivos. Heck, usted va a tener más directorios de los archivos!

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: