Frage

Das Szenario

Ich baue eine Webanwendung auf, in der Berichte in der FLY generiert werden können (basierend auf Informationen, die aus einer SQL-Datenbank abgerufen werden). Diese Berichte enthalten Diagramme, die auch im Fliegen generiert werden können. Da diese Diagramme vertrauliche Informationen enthalten, ist die Verwendung einer Drittanbieter-Diagramm-API (dh: Google-Charts) nicht in Frage.

Das Problem

Ich verwende die GD-Erweiterung von PHP, um diese Diagramme zu generieren. Es ist ziemlich langsam. Caching ist der Weg, um zu gehen, aber das Problem ist, dass es eine große Anzahl möglicher Diagramme gibt. Obwohl ich glaube, dass die Mehrheit der angeforderten Diagramme diejenigen sein wird, die zuvor erzeugt wurden.

Teillösung

-diagramme werden mit Daten und anderen Informationen (Größe, Diagrammtyp usw.) generiert. Da diese ein einzigartiges Diagramm eindeutig identifizieren können, gebe ich jedes Diagramm einen einzigartigen Hash basierend auf diesen Informationen und speichern Sie sie. Jetzt kann ich den Hash für ein neu angefordertes Diagramm berechnen und sehen, ob ich es bereits gerendert habe.

Das Problem damit ist das Ereignis einer Kollision. Um das herumzukommen, denke ich daran, den Hash und eine serialisierte Form der Daten in einer SQL-Tabelle zu speichern. Wenn ich dann einen Cache-Treffer habe, vergleiche ich die Daten immer noch.

Ich bin übertrieben das? (Es ist ein 160-Bit-Hash-Sha1)
Gibt es einen besseren Weg, um damit umzugehen?

War es hilfreich?

Lösung

Ich verwende die GD-Erweiterung von PHP, um diese Diagramme zu generieren. Es ist ziemlich langsam.

Ich vermute, dass es nicht gd ist, was das langsame Bit ist. Der wahrscheinlichste Kandidat ist die Verarbeitung der Zusammenmachung der Daten (aus einer Datenbank?). In diesem Fall erhalten Sie erhebliche Vorteile, um das Datenbankschema / und / oder mithilfe von vorkonsolidierten Daten zu optimieren.

Obwohl Sie auch in der Erwägung ziehen, den Abfrageausgang zu zwischengespeichern, aber Sie verwenden nicht, wenn Sie dieselben Daten an anderer Stelle verwenden, es ist wahrscheinlich einfacher, die Grafikbilder zu sperren.

Das Problem damit ist das Ereignis einer Kollision.

vorzeitige Optimierung - es wird nicht passieren. Wenn Sie jedoch wirklich müssen, teilen Sie die Metadaten, die Sie verwenden, um die Grafik zu generieren, und speichern Sie sie in einer separaten Datei (erneut indexiert über denselben Hash) - vergleichen Sie ihn dann zur Laufzeit. Wenn Sie es schaffen, eine Kollision zu bekommen, haben wir eine Peitsche-Runde und kaufen Sie ein Getränk.

Ich würde empfehlen, einen Blick auf JPGraph zu sehen - was ein hervorragendes Bit von Software ist und das Eingebaute eingebaut ist.

c.

Andere Tipps

Wahrscheinlich, wenn Ihre Hassing-Datenlänge weniger als 160 Bit ist, sind Sie sicher.Andernfalls können, wie Sie sagen, Kollisionen auftreten, und der Vergleich von Daten ist erforderlich.

werfen Sie einen Blick auf chartdirector Wir verwenden es bei der Arbeit und stimmt nicht aufDie GD-Bibliothek sollte schneller sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top