Pergunta

o cenário

Eu estou construindo um aplicativo da Web onde os relatórios podem ser gerados na mosca (com base nas informações recuperadas de um banco de dados SQL). Esses relatórios conterão gráficos, que também podem ser gerados na mosca. Como esses gráficos contêm informações confidenciais, usando uma API da Gráfico de 3ª parte (ou seja, os gráficos do Google) estão fora de questão.

o problema

Estou usando a extensão GD do PHP para gerar esses gráficos. É muito lento. O cache é o caminho a percorrer, mas o problema é que há um grande número de gráficos possíveis; Embora eu acredite que a maioria dos gráficos solicitados será aquelas que foram geradas antes.

solução parcial

Os gráficos são gerados com dados e outras informações (tamanho, tipo de gráfico, etc.). Porque estes podem identificar exclusivamente um gráfico, dou cada gráfico um hash exclusivo com base nessas informações e salvá-lo. Agora eu posso calcular o hash para um gráfico recém-solicitado e ver se eu já tenho renderizado.

O problema com este é o evento de uma colisão. Para se locomover isso, estou pensando em salvar o hash e uma forma serializada dos dados em uma tabela SQL. Então, se eu tiver um hit cache, ainda vou comparar os dados em si.

Eu estou sobrecarregando isso? (É um hash de 160 bits - SHA1) Existe uma maneira melhor de lidar com isso?

Foi útil?

Solução

.

Estou usando a extensão GD do PHP para gerar esses gráficos. É muito lento.

Eu suspeito que não é GD, que é o bit lento. O candidato mais provável é o processamento de coletar os dados (de um banco de dados?). Nesse caso, você pode obter benefícios significativos de otimizar o esquema de banco de dados / e / ou usar dados pré-consolidados.

Embora você também considere armazenar em cache a saída de consulta, mas a menos que você esteja usando os mesmos dados em outro lugar, é provavelmente mais simples cache as imagens do gráfico.

.

O problema com este é o evento de uma colisão.

Otimização precoce - não vai acontecer. Mas se você realmente deve, dividir os meta-dados que você está usando para gerar o gráfico e armazená-lo em um arquivo separado (novamente indexado através do mesmo hash) - depois compará-lo em tempo de execução. Se você conseguir uma colisão, teremos um chicote e compro uma bebida.

Eu recomendaria dar uma olhada no jpgraph - que é um excelente software e tem armazenamento em cache.

c.

Outras dicas

Provavelmente, se o seu comprimento de dados do Hashed for menor que 160 bits, você está seguro.Caso contrário, como você diz, as colisões podem ocorrer e comparar os dados são necessários.

dê uma olhada em Chartdirector Nós usamos no trabalho e não confia emA biblioteca GD, deve ser mais rápida.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top