Cómo escribir y colocar en el sitio un banco de fotos para> 100,000 pinturas

Supongamos que tiene más de 100.000 imágenes que deben clasificarse y colocarse convenientemente en la web para una visualización masiva. Puede ser cualquier cosa: una galería de todo el arte creado por la humanidad (en la tarea que hice), o un archivo histórico de fotos de la ciudad de Moscú, o fotografías de películas, o un archivo general de fotografías de vacaciones de una importante agencia de viajes, o un sitio web de ilustraciones y fotografías de archivo, o un archivo de imágenes para grandes medios durante muchos años, en el que es necesario poner las cosas en orden, organizar la navegación y el acceso para los empleados desde la red interna.



Te diré cómo es recomendable programarlo.



Palabras clave y su herencia



El enfoque moderno utilizado por todos los bancos de fotos y galerías es proporcionar ilustraciones con un conjunto de etiquetas (palabras clave). He desarrollado este enfoque en dos direcciones: (1) las etiquetas se pueden heredar (el usuario estaba buscando bayas; encontró una imagen con la etiqueta "cereza"), y (2) las etiquetas se pueden adjuntar a nivel no de ilustraciones individuales, sino de directorios.



La desventaja de este enfoque de etiquetado es que busca en base a palabras clave, ignorando la trama de la imagen. El dragón asesinado por la niña y el dragón que mató a la niña son dos tramas diferentes, pero lo mismo para la lista de palabras: Dragón, Niña, Muerte y Ganador (si hubo una batalla). El enfoque de palabra clave no permitirá recuperar una muestra para la consulta "Dragón muerto" que no incluye una imagen de un dragón que derrota a un enemigo asesinado.



Las etiquetas principales son aquellas que son visibles para el usuario en el directorio alfabético. Las etiquetas adicionales son aquellas que están disponibles para el usuario solo ingresando manualmente los nombres de estas etiquetas en el texto de la cadena de búsqueda. Considero el número óptimo de etiquetas: principal = 1/75, adicional = 1/195, del número de imágenes.



¡Designe plurales (jinetes, montañas, etc.) de etiquetas en nombres de archivo como <nombre de etiqueta>! (es decir, un signo de exclamación). Necesitará un diccionario de cómo se pueden llamar las etiquetas: plural, femenino / masculino, palabras sinónimos, faltas de ortografía.



Mantenga el diccionario de etiquetas en 4 archivos: Marks.csv - etiquetas principales, Other.csv - etiquetas adicionales, Wrong.csv - ortografía incorrecta, sinónimos, nombres de etiquetas en plural, Artists.csv - autores. En los archivos Marks.csv y Other.csv, después del identificador de etiqueta y el nombre principal en ruso, se enumeran las etiquetas principales (es decir, herencia) .



Marks.csv



Arwen; ( );Person,Girl,Elf,LordOfTheRings
ThorinOakenshield; ;Person,Male,Beard,LordOfTheRings


Aquí está escrito que Arwen es una persona, una niña, un elfo, un personaje de El Señor de los Anillos; Thorin Oakenshield: una persona, un hombre, usa barba, el personaje de "El Señor de los Anillos". En consecuencia, cuando el usuario busque "El señor de los anillos", se encontrarán todas las imágenes de Arwen y Thorin. Al buscar "barba", entre otras cosas, habrá Thorin. Cuando busque "Thorin", también se encontrará, ya que esta ortografía abreviada se encuentra en Wrong.csv.



Estructura de carpetas



Si superponemos la muestra "mostrar chicas" o "mostrar el sol" en 100.000 imágenes, el número de resultados será demasiado grande. Pero esto no sucederá si las imágenes se dividen en carpetas. Por ejemplo, en el directorio raíz hay una carpeta Dragons, dentro de ella hay una carpeta amarilla, dentro está una carpeta Girls (es decir, imágenes con niñas), y dentro de ella (en todas las subcarpetas) hay 200 imágenes. En este caso, no aparecerán estas 200 imágenes en los resultados de búsqueda, sino la carpeta que las contiene. También es mejor para el usuario.



Aquí, sin embargo, hay un problema de lazos estrechamente relacionados. Los reyes casi siempre usan coronas en las imágenes, pero no en todos los casos. Digamos que hay una carpeta llamada Kings, y contiene 3000 imágenes, de las cuales 2500 están en coronas. Aquí, en lo que respecta a la corona, el enfoque simple para mostrar la carpeta no funciona.



Creo que la cantidad óptima de carpetas = 1/28 de la cantidad de imágenes.



Como comprenderá, si el archivo ya está en la carpeta Dragones / Amarillo / Niñas, entonces no necesita agregar estas etiquetas al nombre del archivo, agregue solo los identificadores de etiqueta que no siguen al nombre del archivo desde su ubicación de almacenamiento.







Multilingüe, íconos, textos, subcarpetas virtuales



Dentro de cada carpeta, se crea un archivo _.jpg con un tamaño de 200 (ancho) * 280 (alto): este es el icono de la carpeta cuando se ve (el texto se muestra sobre él), tanto cuando el usuario está en la carpeta principal como cuando el usuario navega por los resultados de búsqueda (si se encuentra esta carpeta) Los iconos de palabras clave tienen la misma resolución.



Además, en muchas carpetas se crea un archivo _.txt, que consta de las siguientes líneas:



Artefacto \ _. Txt (fragmento)



=Mielofon
=Mjolnir
=Palantir
 =ThanosGlove
=Glass-Potion
by-DavisonCarvalho=*
TheWitcher/Wolf-Head-Logo| 
DisneyPrincess/Moana/HeartOfTeFiti|  
SuperHeroes/Hellraiser/HellraiserBox| 
-m|Artefact


Aquí vemos los tipos de registros:



  1. Frascos = Poción de vidrio - alias para subcarpetas. En la ilustración de arriba, vemos que el seudónimo de la carpeta de Japón no se grabó, y cuando se visualiza la carpeta, no se traduce al ruso. Dos etiquetas: vidrio y poción (vidrio y poción) se traducen en una sola palabra.
  2. by-DavisonCarvalho = * - no se requiere alias
  3. SuperHeroes / Hellraiser / HellraiserBox | Lemarshan's Box es una subcarpeta virtual. Una subcarpeta en otro directorio también se mostrará aquí bajo el nombre dado.
  4. -m | Artefacto : la carpeta representa la etiqueta Artefacto. Si se adjunta texto a esta etiqueta, se escribirá debajo de las ilustraciones.


Tamaño en disco



Ahora 111'000 imágenes ocupan 65GB de espacio en disco. Y esto a pesar del hecho de que en muchos casos es necesario hacer un formato png más pesado a partir de ellos:



  • ( ), paint-.
  • - , .
  • .webp, .png, (, , ).
  • .png, .jpg, .gif. .




index.php : lanzado sin parámetros, muestra la carpeta raíz de la galería, el alfabeto y la cadena de búsqueda. Al hacer clic en una subcarpeta en la carpeta raíz, va a ella. Al hacer clic en una letra del alfabeto, va a las etiquetas principales que comienzan con esta letra. Cuando ingresa texto en la cadena de búsqueda, va a la etiqueta identificada por este texto.



i.php es una herramienta para ver una imagen seleccionada. Le permite navegar a las etiquetas de la lista que coincide con esta imagen.

img - carpeta raíz de la galería web

m - carpeta con miniaturas generadas de todas las imágenes. Las miniaturas tienen 200 de alto, ancho en proporción a la imagen. La estructura de la carpeta m sigue la estructura de la carpeta img. La carpeta m se crea mediante programación antes de cargar cada versión de la galería.

Etiquetas : para cada palabra clave, contiene un archivo con el resultado de su búsqueda en directorios.

Marcas - tipos de archivo:



  1. Para cada palabra clave, contiene su archivo en miniatura
  2. Para la mayoría de las palabras clave, contiene un archivo con su descripción textual o una historia temática, anécdota
  3. Para algunas palabras clave, contiene una o más historias temáticas de texto html
  4. Además, esta carpeta contiene archivos como <código de letra> .txt: listas de palabras clave ordenadas alfabéticamente para cada letra del alfabeto ruso.


El procedimiento para subir una nueva versión de la galería al sitio



Un programa especialmente escrito (usando Delphi y la biblioteca Graphics32) hace lo siguiente:



  1. — , ( .. ), ( Wrong.csv), _.txt, , .
  2. . , : .jpg .png ..
  3. . . — , .
  4. .


Luego, tanto la carpeta de la galería como estos materiales se cargan en el servidor.



El motor de la galería web no utiliza un DBMS.



Hospedaje



Yo uso Avahost de alojamiento , 100 GB de espacio en disco cuesta 500 rublos al mes. Como puede ver, con un tamaño de colección de 65 GB, miniaturas +, etc. y un tamaño de alojamiento de 100 GB, la actualización nunca es perfecta. No hay suficiente espacio para descargar primero una versión completamente nueva y luego cambiarla sin problemas, hay un intervalo inevitable de tiempo de inactividad del sitio de varias horas. Ahora hago actualizaciones una vez al mes.



Los archivos se envían al alojamiento en forma de archivos. El sistema cPanel que se usa actualmente en todos los sistemas de alojamiento solo puede descomprimir archivos zip. Es recomendable usar archivos de hasta 2.5 GB de longitud, de lo contrario, después de que el archivo se haya cargado en una carpeta a través de la interfaz web de cPanel, la barra de progreso de carga (el color inicial es azul) puede volverse roja en lugar de verde. ¿Cuál es la diferencia? No entendí (el archivo parece estar cargado normalmente incluso en este caso), pero en este caso lo vuelvo a cargar. Para algunas carpetas, esto hace que las carpetas tengan que dividirse en varios archivos zip separados.



Anteriormente intenté crear hosting en casa, compré una netbook usada en Avito por 2000 rublos. Configúralo, todo funciona. Pasan un par de días, no funciona. Reinicio, no sirve. Entonces, funcionó de nuevo, y de nuevo no lo hizo. Cambié el netbook (compré otro más potente, también en Avito, por 3000 rublos) y comencé a usar otro software, lo mismo. Cambié tres proveedores (Seven Sky> Akado> MGTS), lo mismo. En resumen, el equipo que se encuentra en los proveedores aparentemente corta el alojamiento en el hogar, y los proveedores mismos no lo saben. O qué otras razones. Ve a los hosters, no hagas hosting en casa. El alojamiento independiente es una mierda. Incluso un enrutador primitivo para la interacción de juegos de red es mejor acumular php y hospedaje que mantenerlo en casa o en la oficina, y esperar que algo se rompa sin una razón razonable.



Nota para la anfitriona (sobre el alojamiento)



Además de las características tecnológicas (de las cuales solo se necesita realmente una: la cantidad de gigabytes, todo lo demás son los números para todos de acuerdo con su propia escala, llegué a la conclusión de que las características son mejores para los Avachos), existe ese parámetro: resistencia al abuso. "Abuso" es una queja. Además, la razón de la queja puede surgir de la nada, por ejemplo, en el estudio de Artemy Lebedev . Por lo tanto, un hosting normal tiene el parámetro resistencia a balas, resistencia a quejas. (No debe confundirse con el alojamiento especial, donde puede alojar cualquier cosa, a pesar de la página de phishing de un Sberbank con una invitación para ingresar a su cuenta personal; estas son oficinas separadas, no las entiendo).



Monetización



Digamos que usted es un importante medio de comunicación y decide hacer pública una parte importante de sus fotos (acumuladas durante décadas). Por ejemplo, utilizando la tecnología descrita anteriormente. ¿Cómo puedes ganar dinero con esto (a excepción de la marca imponiendo marcas de agua en las fotos, así como vendiéndolas)? Bueno, si ustedes son los medios, entonces ya saben, les contaré el resto.



La mayoría de los esquemas de monetización le dan 10 kopecks del visitante promedio del sitio por día (incluidos tanto los que visitaron el sitio una vez como los que visitaron varias veces al día). Del mismo modo, le da al autor del sitio y a YAN (Yandex Advertising Network). Para ganar más, necesitas involucrar a personas en sectas religiosas o vender talismanes milagrosos, no hago eso. Los agregadores de tales anuncios son fáciles de encontrar en Internet, pagan para lograr resultados (una persona compró una aspiradora Kirby o se convirtió en miembro de una secta). Además, es una pena: no hago esto, pero Yandex de vez en cuando conduce algo como esto a través de mi sitio. Como resultado, la gente a veces todavía vende mierda a un precio alto (a través de Yandex), pero obtengo de 6 a 10 veces menos de esto.



Muchas personas que conozco tienen un bloque de anuncios o algo así por defecto y los anuncios de Yandex no son visibles. Y ellos mismos no lo pusieron. ¿Por qué? No lo sé.



Yandex le permite retirar la cantidad al llegar a 3000 rublos.



Además, el propietario del sitio puede registrarse en miralinks.ru y publicar artículos. La dirección del artículo y sus enlaces deben publicarse para siempre, es decir. asegúrese de que su ubicación no sea demasiado tóxica. Está permitido que los artículos nuevos reemplacen los anteriores en las páginas siguientes de la historia.



Puede vender la colocación de pancartas y, de lo contrario, de acuerdo con el significado del recurso.



¿Dónde puedo ver esta tecnología en acción (qué proyecto estoy haciendo)?



Estoy creando un sitio corchaosis.ru , una especie de wiki análogo para gráficos.



¿Por qué no ha sido posible promoverlo todavía (como creo):



- Las personas solo necesitan un medio para lograr logros.



Incluso si las personas van a una galería de arte para mirar pinturas, todavía se preocupan por el logro material. Visité la galería Tretyakov. Vi el lago de los cisnes.



Si un recurso web no acerca a una persona a los logros materiales, entonces no recurre a él.

Las personas mismas pueden pensar lo contrario, que les gustan las pinturas. No importa. Si hacemos algo sobre las personas, debemos ser "más difíciles" que las personas. Comprender y darse cuenta más. Si un zorro come pollos y ratones, entonces el zorro debe ser más perfecto que los pollos. Desde el nivel de representación del pollo, los resultados de un zorro no se pueden lograr.



- Las personas necesitan interactivas.



WEB 1.0 está muerto.



Si no puede ofrecer interactividad, nadie lo necesita.



No estás siendo observado. Se trata de obtener resultados nuevamente. Kobvoy no va a la jungla por turismo, va a la jungla para comenzar su propio rancho. Si bien el sitio no tiene las herramientas para crear su propio rancho (cartera, etc.), los vaqueros no están interesados ​​en la jungla.



Dónde conseguir un motor listo para usar



En principio, he descrito todo lo que necesitas hacer para hacerlo. Me puedes escribir.



El archivo exe local está escrito en Delphi + Graphics32, el lado del servidor es dos archivos .php.



All Articles