sitio proyecto estructura ejemplos directorios comandos carpetas basicos linux apache image file-management

linux - proyecto - Estructura de carpetas web óptima para ~ 250,000 imágenes



estructura de directorios de linux (5)

A menos que sus usuarios vayan a una carpeta abierta con una lista de directorios de sus imágenes, no creo que la estructura de carpetas aumente o disminuya significativamente las velocidades de recuperación para sus usuarios. Como han dicho otras personas, asegúrese de que la indexación esté activada. Sin embargo, si yo fuera usted, buscaría escribir (o copiar y pegar) un servicio que sirva dinámicamente a las imágenes, en lugar de almacenarlas directamente en la estructura de su archivo web. Considere el uso de LibGD dentro de PHP: debe estar preinstalado en la mayoría de los servidores LAMP.

Desventajas:

  • Servir las imágenes a través de un servicio será un poco más lento que proporcionar enlaces directos
  • Si utiliza una tienda de imágenes back-end, como una base de datos, podría colapsar y dejar todas sus imágenes temporalmente no disponibles

Ventajas:

  • Ahorrará espacio de almacenamiento al redimensionar dinámicamente las imágenes a miniaturas y facilitar el mantenimiento
  • Generalmente, la velocidad del procesador es más económica que el espacio de almacenamiento

Al usar la reescritura de URL, incluso puedes convertir URLs feas como

/imageServer.php?userID=12345imageId=67890&size=full

en algo más elegante y más transparente para tus usuarios:

/jeremyZX/images/myPhoto.jpg /jeremyZX/images/tn/myPhoto.jpg

Esto le dará la apariencia de una estructura de directorio completa de imágenes, mientras que realmente están almacenadas en el formato de back-end que desee.

Tendré alrededor de 200,000 imágenes como parte de mi sitio web. Cada imagen se almacenará 3 veces: tamaño completo, miniatura, miniatura más grande. Las imágenes de tamaño completo tienen entre 50 KB y 500 KB.

Tecnología normal: Linux, Apache, MySQL, PHP en un VPS.

¿Cuál es la forma óptima de almacenar estos para una rápida recuperación y visualización a través de un navegador?

¿Debo almacenar todo en una sola carpeta? ¿Debo guardar las imágenes a tamaño completo en 1 carpeta, las miniaturas en otro, etc.? ¿Debo guardar las imágenes en carpetas de 1000 y mantener un índice en qué carpeta está la imagen?

Gracias por cualquier consejo. Albert.


Con ese tipo de números, puede o no encontrarse con un límite de inode en su servidor. Eso podría ser problemático dependiendo de quién controla esa caja.

En general, se me ocurre algún esquema para dividirlos en tamaños más manejables. Incluso ejecutar ls en un directorio de ese tamaño llevaría años ordenarlo y mostrarlo todo.


Depende de cómo los indiques, de cómo recuperarlos.

No hay nada particularmente en contra de almacenarlos todos en una sola carpeta, pero se vuelve difícil de administrar. Si los está almacenando por nombre de archivo y los nombres de los archivos están razonablemente distribuidos normalmente, es posible que desee tener las subcarpetas separadas por la primera letra del nombre, etc. Si está indexando por fecha agregada, es posible que desee segregarlas por ese nombre. .

Hasta donde yo sé, no hay una forma "más rápida" o "más lenta" de almacenar las imágenes para la recuperación del navegador.


Haga lo que haga, asegúrese de que la indexación de directorios esté habilitada en el sistema de archivos (debe elegir un sistema de archivos que lo admita, pero todos lo hacen)

En la práctica, por ejemplo, ext3, esto no es un problema, ya que está habilitado por defecto en los sistemas más nuevos. Puedes averiguar usando tune2fs (léase el hombre)


Utilizaría una estructura de directorios divididos, de tres o cuatro niveles de profundidad, con la idea de dividir todos los archivos de manera uniforme en muchos directorios, para permitir un mantenimiento fácil y un acceso rápido.

¿Cómo hacerlo? Hay varias alternativas:

  • Tomando los primeros caracteres de los nombres de las imágenes
  • Tomando los primeros caracteres de un hash del nombre
  • Tomando los últimos números de segundos desde 1970 de la fecha en que se agregó la imagen
  • Tomando los últimos caracteres de la identificación de las imágenes en una base de datos (si eso existe)

Supongamos que tenemos IMG8993_full.jpg, IMG8993_thumb.jpg, IMG8993_smallthumb.jpg

Entonces podríamos tener, por ejemplo:

/images/I/M/G/8/IMG8993: IMG8993_full.jpg IMG8993_thumb.jpg IMG8993_smallthumb.jpg