4 Stimmen

Zwischenspeichern von Daten vs. Schreiben in Speichertabelle

Welches wäre der beste Weg, um einen schnellen Hash / Sitzungsspeicher mit einem dieser drei Wege zu erreichen?

Weg 1: Erstellen Sie eine Speichertabelle in MySQL, die einen Hash und einen Zeitstempel speichert, wann der Eintrag erstellt wurde. Ein MySQL-Ereignis löscht automatisch alle Einträge, die älter als 20 Minuten sind. Dies sollte ziemlich schnell gehen, da alle Daten im Speicher gespeichert werden, aber der Overhead der Verbindung zum Datenbankserver könnte diesen Vorteil zunichte machen.

Weg 2: Ich erstelle eine leere Datei mit dem Hash als Dateinamen und erstelle einen Cronjob, der automatisch alle Dateien löscht, die älter als 20 Minuten sind. Das kann wegen der vielen Lesevorgänge auf der Festplatte langsam werden.

Weg 3: Da dies mit PHP zu tun hat und wir das Zend Framework verwenden, könnte ich den Zend_Cache verwenden und den Hash mit einer Time-to-Live von 20 Minuten speichern.

Ich möchte dafür nicht Memcached oder APC verwenden, weil ich denke, dass das ein großer Overhead für nur einige kleine Hashes ist.

Haben Sie Erfahrungen mit ähnlichen Szenarien? Ich würde mich über Ihre Erfahrungen und Lösungen freuen.

1voto

ChrisR Punkte 14182

Wenn Leistung ein Thema ist, würde ich defenately mit memcached gehen. Alle großen Internetseiten verlassen sich auf memcached, entweder für das Caching oder für serverintensive Aufgaben oder sogar für die Speicherung von Sitzungen und Sperrmechanismen.

Memcached ist der richtige Weg, wenn Sie mich fragen

0voto

Chris K Punkte 11536

Erfinden Sie das Rad nicht neu - verwenden Sie Memcache. Entweder das, oder messen Sie Ihre MySQL-Leistung im Vergleich zu Memcache. Denken Sie daran, dass der Zugriff auf die Datenbank in Umgebungen mit hoher Leistung in der Regel ohnehin immer ein Engpass ist.

0voto

Jiri Punkte 15939

Berücksichtigen Sie bei all diesen Ansätzen auch Fragen der Skalierung? Über wie viele Hashes sprechen Sie? Über wie viele Megabytes an Daten sprechen Sie?

  1. Halten Sie es im Speicher Ihres Computers, wenn Sie können (Ihre Variante 3)
  2. Legen Sie es auf die Festplatte, aber halten Sie es im Speicher, wenn Sie können (Ihre Variante 2, wenn Sie dateibasierte Sitzungen verwenden, können Sie $session verwenden, wie jemand darauf hingewiesen hat)
  3. Datenbank verwenden

Haben Sie eine große Menge an Daten? Verwenden Sie Memcached.

0voto

Wie andere gesagt haben, verwenden Sie memcached. Wenn PHP Datenbank-Verbindungspools unterstützen würde, wie zum Beispiel Java, würde ich MySQL empfehlen, aber da PHP so ist, wie es ist, ist memcached die einzige wirkliche Antwort.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X