Стратегия кэширования изображений - PullRequest
0 голосов
/ 16 июля 2010

Сценарий

Я создаю веб-приложение, в котором отчеты могут создаваться на лету (на основе информации, полученной из базы данных SQL).Эти отчеты будут содержать графики, которые также могут быть созданы на лету.Поскольку эти диаграммы содержат конфиденциальную информацию, об использовании API сторонних диаграмм (например, Google Charts) не может быть и речи.

Проблема

Я использую расширение PHP GD для генерации этих диаграмм.Это довольно медленно.Кэширование - это путь, но проблема в том, что существует огромное количество возможных диаграмм;хотя я считаю, что большинство запрошенных диаграмм будут сгенерированы ранее.

Частичное решение

Диаграммы создаются с данными и другой информацией (размер, тип диаграммы и т. д.).Поскольку они могут однозначно идентифицировать диаграмму, я даю каждой диаграмме уникальный хэш на основе этой информации и сохраняю ее.Теперь я могу вычислить хеш для вновь запрошенной диаграммы и посмотреть, отрисовал ли он у меня.

Проблема с этим - событие столкновения.Чтобы обойти это, я думаю о сохранении хеша и сериализованной формы данных в таблицу SQL.Тогда, если у меня будет попадание в кеш, я все равно буду сравнивать сами данные.

Я перерабатываю это?(Это 160-битный хеш - SHA1)
Есть ли лучший способ справиться с этим?

Ответы [ 3 ]

0 голосов
/ 16 июля 2010

Взгляните на ChartDirector мы используем его на работе, и он не зависит от библиотеки GD, должен быть быстрее.

0 голосов
/ 16 июля 2010

Я использую расширение PHP GD для генерации этих диаграмм. Это довольно медленно.

Я подозреваю, что это не GD, который является медленным битом. Наиболее вероятным кандидатом является обработка сопоставления данных (из базы данных?). В этом случае вы можете получить значительные преимущества от оптимизации схемы базы данных и / или использования предварительно консолидированных данных.

Хотя вы можете также рассмотреть возможность кэширования вывода запроса, но если вы не используете те же данные в другом месте, возможно, проще кэшировать изображения графиков.

Проблема с этим - событие столкновения.

Преждевременная оптимизация - этого не произойдет. Но если вам действительно нужно, разделите метаданные, которые вы используете для создания графика, и сохраните его в отдельном файле (снова проиндексированном с помощью того же хеша) - затем сравните его во время выполнения. Если вам удастся столкнуться, мы проведем сбор денег и купим вам напиток.

Я бы порекомендовал взглянуть на jpgraph, который является отличным программным обеспечением и имеет встроенное кэширование.

С

0 голосов
/ 16 июля 2010

Скорее всего, если длина хешированных данных меньше 160 бит, вы в безопасности. В противном случае, как вы говорите, могут возникнуть коллизии, и сравнение данных необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...