2012-08-31 9 views
5

mi razón principal es obtener una opinión sobre las diferentes opciones. Tengo archivos/pulgares en un directorio que están asociados con un video y cuando tengo que usarlos utilizo la función glob() glob (DIRECTORIO./nombre_archivo*.jpg); y devuelve una matriz de todos los archivos JPG del video.PHP - Leer el directorio frente a la obtención de la base de datos

La función glob en sí es muy rápida, pero igual me preocupa el uso porque en cada página puede haber de 20 a 50 videos, de modo que habrá entre 20 y 50 llamadas globales si continúo usándolo o comenzando a poner datos en la base de datos. buscar lista de archivos desde allí en lugar de glob(); ?

si hay una alternativa mejor, por favor avíseme.

Gracias.

+0

considerando que hay más de 50 usuarios en línea a la vez. – ArslanCb

+0

El problema central en esta pregunta parece ser que usted está "preocupado por el uso", pero no está claro todo lo que quiere decir con eso. Explique el problema que le concierne más claramente para que podamos ayudarlo. En su opinión, ¿cuál es exactamente el problema con la forma en que está haciendo esto ahora? –

+0

Gracias Nate. Sí, mi preocupación principal es CPU/Memoria o puede decir rendimiento. Qué opción es mejor. – ArslanCb

Respuesta

6

Como es habitual con las preguntas de rendimiento, los resultados pueden variar bastante, por lo que la respuesta es: lo que es más rápido es lo que funciona más rápido para .

El lugar para comenzar es medir cuánto tiempo lleva hacer las cosas como las estás haciendo ahora. Una vez que haya hecho esto, pregúntese: ¿esto es lo suficientemente rápido? Puede ser que, aunque no sea la forma más rápida de hacer las cosas, sigue siendo tan rápido que la velocidad no es una preocupación.

¿Qué parte del tiempo se procesa una página para obtener el archivo globs? 1%? 10%? 50%? Cuanto más alto es este porcentaje, más útil se vuelve considerar cambiar la forma de hacer las cosas.

Además, ¿cómo es el rendimiento del sitio como un todo? Si duplicó la velocidad de cada carga de página, ¿notará la gente? Si no es así, puede que no valga la pena hacer ajustes de rendimiento, incluso si ve el lugar obvio para hacerlo.

Si cree que podría hacerlo mejor, implemente la funcionalidad usando su base de datos y mida si eso es más rápido. De nuevo, los resultados con esto podrían ser muy variables. Por ejemplo, si su base de datos tiene una gran carga, obtener los resultados de la base de datos puede ser mucho más lento. Si tiene una base de datos enormemente poderosa que apenas se usa, puede ser muy rápido. Solo las pruebas pueden decirle la verdad.

Agregaré que la forma en que está haciendo las cosas ahora parece más simple y más fácil de mantener, porque encuentra nombres de archivos basados ​​en los archivos reales en su disco. Si intenta utilizar una base de datos, tendrá que preocuparse por sincronizar la lista de nombres de archivos en la base de datos con la lista de archivos en el sistema de archivos.

Sin embargo, hay que tener en cuenta que muchos sistemas de archivos funcionan peor cuando se tiene un único directorio con una gran cantidad de archivos. Si tiene esta situación, considere dividir los archivos en múltiples subdirectorios. Un enfoque popular es crear directorios con nombres az y luego poner todos los archivos que comiencen con "a" en el directorio "a", todos los archivos que comiencen con "b" en el directorio "b", etc. Sin embargo, esto probablemente solo sea importante una vez que tenga decenas de miles de archivos, e incluso entonces depende del sistema de archivos particular y del hardware en el que se ejecuta.

(Editar basado en los comentarios :)

Dado que estamos hablando de pre-cálculo de los resultados y el almacenamiento de los de la base de datos, que sugieren que un enfoque mejor que poner las cosas en una base de datos es utilizar un servidor de almacenamiento en caché como http://memcached.org/. Puede ver esto como un enfoque híbrido: todavía hace las cosas de la forma en que las está haciendo ahora, pero cada vez que quiere un resultado, primero verifica el caché para ver si contiene el resultado; si lo hace, utilizó el resultado almacenado en caché, de lo contrario, calcule el nuevo glob.Esto evita el problema de mantener la base de datos y el sistema de archivos sincronizados, ya que las entradas antiguas de caché pueden caducar y ser reemplazadas por nuevas y correctas.

+0

Gracias, ahora realizaré una prueba, será en un entorno local, por lo que los resultados pueden variar, pero sigue siendo una buena práctica antes de que inicie sesión. – ArslanCb

+0

nombre de archivo es único y los archivos de pulgar son como filename-1.jpg, filename-2.jpg, filename-3.jpg y así sucesivamente, puede haber de 1 a 30 pulgares de cada video. Estaba pensando en utilizar la base de datos porque una vez que se guardan los datos, no tengo que engordar cada vez. solo reutilice los datos que ya están guardados y con la combinación de json (ed) los elementos de la matriz pueden ser mucho más rápidos ... – ArslanCb

+0

Veo lo que quiere decir. Eso es inherentemente más rápido porque el resultado está calculado previamente para usted. Sin embargo, en lugar de una base de datos, sugiero usar un servidor de caché como memcached, es más apropiado para este uso. –

0

Si ya está almacenando información para el video en la base de datos, podría considerar almacenar solo el número de pulgares por video en la tabla que contiene los datos de video. Esto sería mucho más rápido que tener que consultar una tabla separada de nombres completos de archivo porque solo tendría que hacer referencia a un campo en un registro que ya ha consultado. Esto podría ser un buen compromiso entre sus dos ideas actuales. Sin embargo, debería asegurarse de que los nombres de sus pulgares sean consistentes y programables. Por ejemplo, dado que el video 123 tiene 4 pulgares, puede generar:

/path/to/video_123/thumb_01.jpg 
/path/to/video_123/thumb_02.jpg 
/path/to/video_123/thumb_03.jpg 
/path/to/video_123/thumb_04.jpg 
+0

Gracias por eso, pero los pulgares también tienen diferentes tamaños y el usuario también puede cargar pulgares personalizados y eliminar existentes, el nombre de archivo es básicamente un prefijo de los pulgares. thumbs también puede tener nombre como filename-300x240-2.jpg Mi código anterior solo usaba incrementos y estaba almacenando el número, pero ahora es poco más que un incremento. Gracias por la sugerencia, estoy almacenando una matriz json (ed) ahora y creo que servirá para el propósito. S.O tiene Awesome People y una gran comunidad. – ArslanCb

Cuestiones relacionadas