Pregunta

El escenario

Estoy construyendo una aplicación web donde los informes se pueden generar en la mosca (según la información recuperada de una base de datos SQL). Estos informes contendrán tablas, que también pueden generarse sobre la marcha. Debido a que estos gráficos contienen información confidencial, utilizando una API de la TRABAJA de terceros (es decir,: Google Charts) está fuera de la pregunta.

El problema

Estoy usando la extensión GD de PHP para generar estos gráficos. Es bastante lento. El almacenamiento en caché es el camino a seguir, pero el problema es que existe una gran cantidad de gráficos posibles; Aunque creo que la mayoría de los gráficos solicitados serán los que se hayan generado antes.

Solución parcial

Los gráficos se generan con datos y otra información (tamaño, tipo de gráfico, etc.). Debido a que estos pueden identificar de manera única un gráfico, le doy a cada tabla un hash único basado en esta información y ahorrarlo. Ahora puedo calcular el hash para una tabla recién solicitada y ver si ya lo he hecho.

El problema con este es el evento de una colisión. Para evitarlo, estoy pensando en ahorrar el hash y una forma serializada de los datos en una tabla SQL. Entonces, si tengo un golpe de caché, todavía compare los datos en sí.

¡Estoy por encima de la ingeniería de esto? (Es un hash de 160 bits - SHA1)
¿Hay una mejor manera de manejar esto?

¿Fue útil?

Solución

Estoy usando la extensión GD de PHP para generar estos gráficos. Es bastante lento.

Sospecho que no es GD, que es el bit lento. El candidato más probable es el procesamiento de la recopilación de los datos (de una base de datos?). En cuyo caso puede obtener beneficios significativos de la optimización del esquema de la base de datos / / o utilizando datos pre-consolidados.

Aunque también puede considerar almacenar en caché la producción de consulta, pero a menos que esté usando los mismos datos en otros lugares, es probable que sea más sencillo para almacenar en caché las imágenes de gráficos.

El problema con este es el evento de una colisión.

Optimización prematura: no va a suceder. Pero si realmente debe, dividir los metadatos que está utilizando para generar el gráfico y almacenarlo en un archivo separado (nuevamente indexado a través del mismo hash), luego compárelo en tiempo de ejecución. Si logras obtener una colisión, tendremos un látigo y te comprará una bebida.

Recomendaría tener un vistazo a JPGRAPH, que es un excelente software y tiene almacenamiento en caché.

c.

Otros consejos

Probablemente, si su longitud de datos hash es inferior a 160, está a salvo.De lo contrario, como usted dice, las colisiones pueden ocurrir y comparar los datos es necesaria.

Eche un vistazo a ChartDirector Lo usamos en el trabajo y no confía enLa biblioteca GD, debe ser más rápida.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top