Frage

Ich schreibe eine Anwendung und werde in vielen verschiedenen Sprachen einige Wörterbuchwerte haben. Ich weiß, dass ich GetText verwenden könnte, aber Afair -Dateien müssen nach der Bearbeitung kompiliert werden, und ich möchte das Benutzer das Wörterbuch bearbeiten lassen, und ich kann .MO -Dateien auf dem Server nicht neu kompilieren. Ich weiß nicht, wie viele Sprachen verwendet werden, daher muss die Lösung elastisch sein.

Ich habe eine Datenbank entworfen, damit sie gut funktioniert, und das Schema sieht gut aus, aber für jeden Wörterbuchwert gibt es ein paar Verbindungen, sodass die Lösung nicht zu schnell ist.

Aus diesem Grund denke ich darüber nach, Wörterbuchwerte einmal zu speichern und ihn erst nach dem Bearbeiten eines Wertes darin zu aktualisieren. Leider konnten statische PHP -Variablen nicht verwendet werden, da sie am Ende der Anfrage sterben. Ich möchte keine Sitzung verwenden, da ich DB -Anrufe pro Benutzer tätigen muss. Idealerweise möchte ich statische Variablen genauso verwenden wie in Java - sie leben so lange wie die Anwendung in JVM.

Was ist die beste Lösung, um einige Variablen (in meinem Beispiel - Wörterbücher, Wörterbucheinträge usw.) für eine lange Zeit (nicht pro Anfrage) für alle Benutzer (nicht pro Benutzer) zu speichern?

Ich denke daran, so etwas zu machen DictionaryValues Klasse, serialisieren Sie es einmal und deserialisieren Sie es dann bei jeder Anfrage. Jedes Mal, wenn jemand das Wörterbuch bearbeitet, wird das Objekt erneut serialisiert und ersetzt das alte serialisierte Objekt. Natürlich tritt die Bearbeitung selten im Vergleich zu der Art und Weise auf, wie oft Wörterbuchwerte gelesen werden.

Ist das eine gute Lösung? Sollte ich das Objekt serialisieren und auf der Festplatte speichern oder in die Datenbank schreiben? Welches ist schneller?

Vielleicht finden Sie eine bessere Lösung für dieses Problem?

War es hilfreich?

Lösung

Sie könnten PHP ausprobieren APC. Es ist schnell und einfach zu bedienen. Sie können Objekte serialisieren/deserialisieren und sie leicht speichern/erhalten.

In einer verteilten Umgebung können Sie dieselben Funktionen verwenden Memcache.

Andere Tipps

Einige Optionen, wenn Memcache / APC zu viel oder nicht möglich ist:

Sie können Ihre Datenbankwerte häufig in eine PHP -Datei "kompilieren" und dies einbeziehen. Das wäre die schnellste Parsen und Verarbeitung.

Wenn Sie nicht jeden Wörterbuchwert auf jeder Seite benötigen (nicht wahr, nicht wahr?), Möchten Sie möglicherweise eine Caching -Tabelle verwenden, die ohne die Verknüpfungen funktionieren kann. Das wäre die beste Lösung aus Fußabdruckperspektive.

Es gibt ein paar Optionen:

  1. Sie könnten gemeinsam genutzten Speicher verwenden (SHMOP oder Memcache).
  2. Sie können in eine Datei oder Datenbank einspeichern - versuchen Sie es Pear :: cache_lite (oder APC Wie @jldupont vorschlägt)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top