storage – Almacenar un millón de imágenes en el sistema de archivos

Pregunta:

Tengo un proyecto que generará una gran cantidad de imágenes. Alrededor de 1.000.000 para empezar. No son imágenes grandes, así que las almacenaré todas en una sola máquina al principio.

¿Cómo recomienda almacenar estas imágenes de manera eficiente? (Sistema de archivos NTFS actualmente)

Estoy considerando un esquema de nomenclatura … para empezar, todas las imágenes tendrán un nombre incremental de 1 en adelante. Espero que esto me ayude a ordenarlas más tarde si es necesario, y colocarlas en diferentes carpetas.

cuál sería un mejor esquema de nomenclatura:

a / b / c / 0 ... z / z / z / 999

o

a / b / c / 000 ... z / z / z / 999

alguna idea sobre esto?

Respuesta:

Recomendaría usar un sistema de archivos normal en lugar de bases de datos. Usar el sistema de archivos es más fácil que una base de datos, puede usar herramientas normales para acceder a los archivos, los sistemas de archivos están diseñados para este tipo de uso, etc. NTFS debería funcionar bien como sistema de almacenamiento.

No almacene la ruta real a la base de datos. Es mejor almacenar el número de secuencia de la imagen en la base de datos y tener una función que pueda generar una ruta a partir del número de secuencia. p.ej:

 File path = generatePathFromSequenceNumber(sequenceNumber);

Es más fácil de manejar si necesita cambiar la estructura del directorio de alguna manera. Tal vez necesite mover las imágenes a una ubicación diferente, tal vez se quede sin espacio y comience a almacenar algunas de las imágenes en el disco A y otras en el disco B, etc. Es más fácil cambiar una función que cambiar rutas en la base de datos .

Usaría este tipo de algoritmo para generar la estructura del directorio:

  1. Primero rellene su número de secuencia con ceros a la izquierda hasta que tenga al menos una cadena de 12 dígitos. Este es el nombre de su archivo. Es posible que desee agregar un sufijo:
    • 12345 -> 000000012345.jpg
  2. Luego, divida la cadena en bloques de 2 o 3 caracteres donde cada bloque denota un nivel de directorio. Tener un número fijo de niveles de directorio (por ejemplo, 3):
    • 000000012345 -> 000/000/012
  3. Almacene el archivo en el directorio generado:
    • Por lo tanto, la ruta completa y el nombre de archivo para el archivo con ID de secuencia 123 es 000/000/012/00000000012345.jpg
    • Para el archivo con ID de secuencia 12345678901234 la ruta sería 123/456/789/12345678901234.jpg

Algunas cosas a considerar sobre las estructuras de directorios y el almacenamiento de archivos:

  • El algoritmo anterior le brinda un sistema en el que cada directorio hoja tiene un máximo de 1000 archivos (si tiene menos del total de 100000000000 de archivos)
  • Puede haber límites en la cantidad de archivos y subdirectorios que puede contener un directorio, por ejemplo , el sistema de archivos ext3 en Linux tiene un límite de 31998 subdirectorios por directorio.
  • Las herramientas normales (WinZip, Windows Explorer, línea de comandos, bash shell, etc.) pueden no funcionar muy bien si tiene una gran cantidad de archivos por directorio (> 1000)
  • La estructura de directorios en sí ocupará algo de espacio en el disco, por lo que no querrá demasiados directorios.
  • Con la estructura anterior, siempre puede encontrar la ruta correcta para el archivo de imagen con solo mirar el nombre del archivo, si estropea las estructuras de su directorio.
  • Si necesita acceder a archivos desde varias máquinas, considere compartir los archivos a través de un sistema de archivos de red.
  • La estructura de directorio anterior no funcionará si elimina muchos archivos. Deja "agujeros" en la estructura de directorios. Pero como no va a eliminar ningún archivo, debería estar bien.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım