質問

シナリオ

私は、レポートをその場で生成できるWebアプリケーションを構築しています(SQLデータベースから取得した情報に基づいて)。これらのレポートにはチャートが含まれています。これはその場でも発生する可能性があります。これらのチャートには、サードパーティチャートAPI(Google Charts)を使用して機密情報が含まれているため、問題が解決しません。

問題

PHPのGD拡張子を使用してこれらのチャートを生成しています。それはかなり遅いです。キャッシングは行く方法ですが、問題は膨大な数の可能性のあるチャートがあります。私は要求されたチャートの大部分が前に生成されたものになると私は信じていますが。

部分溶液

チャートはデータやその他の情報(サイズ、チャートタイプなど)で生成されます。これらはチャートを一意に識別できますので、各チャートにこの情報に基づいて一意のハッシュを渡して保存します。今、私は新しく要求されたチャートのハッシュを計算し、すでにそれをレンダリングしているかどうかを確認してください。

問題は衝突のイベントです。それを回避するために、ハッシュとシリアル化された形式のデータをSQLテーブルに保存することを考えています。それから私がキャッシュヒットしているならば、私はまだデータ自体を比較します。

これをオーバーエンジニアリングしていますか? (それは160ビットハッシュ - SHA1)
これを処理するより良い方法はありますか?

役に立ちましたか?

解決

PHPのGD拡張子を使用してこれらのチャートを生成しています。それはかなり遅いです。

私はそれが遅いビットではないと思われる。最も可能性の高い候補は、データを照合する処理(データベースから)です。その場合、データベースのスキーマ/および/または事前に連結されたデータを使用することから重要な利点がある可能性があります。

クエリ出力のキャッシュを検討することもできますが、他の場所で同じデータを使用しない限り、グラフ画像のキャッシュが簡単です。

これに関する問題は衝突のイベントです。

時期尚早の最適化 - それは起こるつもりはない。しかし、本当に必要な場合は、使用しているメタデータを分割してグラフを生成し、それを分離ファイルに保存します(再び同じハッシュを介してインデックス付き) - ランタイムで比較します。あなたが衝突を得るために管理するならば、我々は鞭打ちを持っており、あなたに飲み物を買うでしょう。

JPGraphを見て、これはソフトウェアの優れたビットで、内蔵のキャッシュを持っています。

c。

他のヒント

最もハッシュされたデータ長が160ビット未満の場合、安全です。さもなければ、あなたが言うように、衝突が発生し、データを比較することが必要であるかもしれません。

chartDirector 仕事で使用していますGDライブラリは速くて速いはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top