Вопрос

Сценарий

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

проблема

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

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

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

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

Я переусердрен это? (Это 160-битная хэш - Sha1)

Есть ли лучший способ справиться с этим?

Это было полезно?

Решение

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

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

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

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

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

Я бы порекомендовал посмотреть на JPGraph - это отличное программное обеспечение и имеет кэширование встроенного.

c.

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top