문제

시나리오

SQL 데이터베이스에서 검색된 정보를 기반으로 보고서를 즉시 생성 할 수있는 웹 응용 프로그램을 구축하고 있습니다. 이러한 보고서에는 차트가 포함되어 있으며 즉시 생성 될 수 있습니다. 이러한 차트에는 민감한 정보가 포함되어 있으므로 3 번째 파티 차트 API (예 : Google 차트)를 사용하여 문제가 없습니다.

문제

PHP의 GD 확장을 사용하여 이러한 차트를 생성합니다. 그것은 꽤 느립니다. 캐싱은가는 길입니다. 그러나 문제는 엄청난 차트가 있습니다. 내가 요청한 차트의 대다수가 이전에 생성 된 것들이 될 것이라고 믿지만,

부분 용액

차트는 데이터 및 기타 정보 (크기, 차트 유형 등)로 생성됩니다. 이것들은 차트를 고유하게 식별 할 수 있기 때문에이 정보를 기반으로 각 차트를 고유 한 해시를 제공하고 저장합니다. 이제 새로 요청한 차트에 해시를 계산하고 이미 렌더링한지 확인할 수 있습니다.

이 문제는 충돌이 발생합니다. 그 주위를 둘러 보려면 해시를 저장하고 SQL 테이블에서 데이터의 직렬화 된 형식의 형식을 생각하고 있습니다. 그런 다음 캐시 히트가있는 경우 데이터 자체를 여전히 비교할 것입니다.

나는이 over-engineering이 왔습니까? (그것은 160 비트 해시 - sha1)
이것을 처리하는 더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

PHP의 GD 확장을 사용하여 이러한 차트를 생성합니다. 그것은 꽤 느립니다.

나는 느린 비트 인 GD가 아니라고 의심한다. 가장 가능성이있는 후보자는 데이터를 데이터베이스에서 데이터를 수집하는 처리입니다. 이 경우 데이터베이스 스키마 / 및 / 또는 사전 통합 데이터를 사용하여 상당한 이점을 얻을 수 있습니다.

또한 쿼리 출력을 캐싱하는 것을 고려하지만 동일한 데이터를 사용하지 않는 한 그래프 이미지를 캐시하는 것이 더 간단합니다.

이 문제는 충돌이 발생합니다.

조기 최적화 - 일어나지 않을 것입니다. 그러나 정말로 해야하는 경우, 사용중인 메타 데이터를 분리하여 그래프를 생성하고 별도의 파일 (동일한 해시를 통해 다시 색인화 됨)에 저장 한 다음 런타임에 비교하십시오. 당신이 충돌을 일으킬 수 있다면, 우리는 당신을 채찍이라고 생각하고 음료를 사다.

jpgraph를 살펴 보는 것이 좋습니다. 이는 탁월한 소프트웨어가 우수하고 내장을 캐싱했습니다.

c.

다른 팁

대부분의 해시 데이터 길이가 160 비트 미만이면 안전합니다.그렇지 않으면, 당신이 말하는 것처럼 충돌이 발생하고 데이터를 비교할 수 있습니다.

"nofollow noreferrer"> chartdirector 직장에서 사용하며 의지하지는 않습니다.GD 라이브러리는 더 빨리해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top