2009-06-01 8 views
1

Innerhalb eines php/mysql-Systems haben wir eine Reihe von Konfigurationswerten (ca. 200) - das sind meist Booleans oder Ints und speichern Dinge wie die Anzahl der Ergebnisse pro Seite und ob Seiten sind 2 oder 3 Spalten. Dies ist alles in einer einzigen MySQL-Tabelle gespeichert und wir verwenden eine einzelne Funktion, um diese Werte zurückzugeben, wie sie angefordert werden, auf bestimmten Seiten lädt es wahrscheinlich bis zu 100 Anfragen an diese Config-Tabelle. Mit der Anzahl der Sites, die dieses System verwenden, bedeutet dies, dass in jeder Sekunde potenziell tausende Anfragen auf diese Werte fallen. Die Frage ist, ob diese Methode sinnvoll ist oder ob es vorzuziehen ist, eine einzelne Anfrage pro Seite auszuführen und alle Konfigurationen in einem Array zu speichern und von hier jedes Mal abzurufen.im Array speichern oder mehrere db-Abfragen verwenden

Antwort

1

Verwenden Sie einen Cache wie Memcache, APC oder andere. Laden Sie die Einstellungen einmal, cachen Sie sie und teilen Sie sie über Ihre Sitzungen mit einem Singleton-Objekt.

Auch wenn der Abfragecache gespeichert wird, ist es eine Verschwendung von Zeit und Ressourcen, die Datenbank immer wieder abzufragen. Stattdessen wird der Cache, der sich im Speicher befindet, bei jeder Anforderung, die die Werte ändert, ungültig, sodass er sofort erneut geladen wird, wenn ein Benutzer das nächste Mal einen Wert von ihm anfordert.

+0

auf jeden Fall klingt wie der beste Plan, danke – robjmills

1

Wenn Sie den Abfragecache MySQL aktivieren, wird die Abfrage, die Ihre Werte auswählt, im Speicher zwischengespeichert, und MySQL gibt eine sofortige Antwort aus dem Speicher, sofern die Abfrage oder Daten in den zugrunde liegenden Tabellen nicht geändert werden.

Dies ist sowohl für die Leistung als auch für die Verwaltbarkeit ausgezeichnet.

Die Abfrageergebnisse können zwischen den Sitzungen wiederverwendet werden. Das heißt, wenn Sie 1000 Sitzungen haben, müssen Sie 1000 Kopien Ihrer Daten nicht beibehalten.

+0

wir haben den Abfrage-Cache aktiviert und die Daten in dieser Tabelle sind ziemlich statisch, was ich denke, hält den Cache an Ort und Stelle – robjmills

0

Möglicherweise möchten Sie Memcache dafür verwenden. Ich denke, es wäre schneller als mehrere DB-Abfragen (sogar mit Query-Caching an), und Sie benötigen keine Datenbankverbindung, um sie zu bekommen.

Sie könnten in Betracht ziehen, sie einfach aus einer Flat-Datei in den Speicher zu laden, dies bietet Ihnen die Möglichkeit, Ihre Config-Werte zu versionieren.

0

Ich würde Memcache auf jeden Fall empfehlen. Wir haben ein ähnliches Setup und es hat die Ressourcennutzung auf diesem Server spürbar gesenkt.

Verwandte Themen