2009-06-15 4 views
0

Ich bin auf einer Optimierung Kreuzzug für eine meiner Websites, versuchen, so viele MySQL-Abfragen wie möglich zu reduzieren.Welcher ist in Bezug auf Ressourcen weniger teuer?

Ich implementiere partielles Caching, das TXT-Dateien für verschiedene Module der Site schreibt und bei Bedarf aktualisiert. Ich bin auf einen gestoßen, der nicht für alle Benutzer statisch bleiben kann, also muss die TXT-Datei, die auf der HD geschrieben wird, im laufenden Betrieb via PHP geändert werden.

die über

flush(); 
ob_start(); 
include('file.txt'); 
$contents = ob_get_clean(); 

Dann ändere ich die html in dem $ contents Variable und Echo it out für verschiedene Benutzer durchgeführt wird.

Alternativ kann ich es lassen, wie es ist, die eine mysql-Abfrage ausführt, die eine kleine Tabelle abfragt, die Kategorienamen (etwa 13 von ihnen) hat.

Welcher ist weniger teuer? Führen Sie eine Abfrage jedes Mal aus ... oder tun Sie das über die oben beschriebene Methode, um HTML-Code im Handumdrehen in eine statische TXT-Datei einzufügen?

+0

Mein Bauchgefühl sagt mir, dass dieser Weg nicht besser ist, als nur die Datenbank abzufragen. Obwohl mir nicht ganz klar ist, wie viel Arbeit für jede Seite getan wird. Aber trotzdem sollten Sie Ihren Titel bearbeiten, um ein paar Informationen darüber zu geben, worum es in der Frage eigentlich geht. –

Antwort

2

Das Lesen der Datei (Speichern in sehr seltsamen Setups) ist etwas schneller als die Abfrage der Datenbank (keine Netzwerkinteraktion, & c), aber der Unterschied wird kaum messbar sein - nur versuchen und sehen, ob Sie es messen können!

+0

Ich weiß, dass ich hier nur nach Strohhalmen greife, es ist nur ein Lieblingsärgernis von mir als alles andere ... versuche, die "Anzahl der Anfragen zum Schreiben dieser Seite" auf ein Minimum zu reduzieren. –

+0

Konzentrieren Sie sich nicht nur auf die Anzahl der Abfragen. Es ist durchaus möglich, dass mehrere Abfragen effizienter sind als eine oder dass eine Abfrage effizienter ist als eine Alternative. – ceejayoz

+0

Mein Hauptpunkt, @Yegor, ist, wenn die Leistung beteiligt ist, nicht raten, * messen *: jedermanns Intuition war in diesem Bereich manchmal falsch. Messen Sie in einer Situation, die so nah wie möglich an Ihren tatsächlichen Bedürfnissen liegt, um Vertrauen in die Antwort zu bekommen, die Sie bekommen. –

0

Versuchen Sie beide und wählen Sie die, die entweder ein klarer Gewinner ist oder wenn nicht verfügbar, wartungsfreundlicher. Dies hängt davon ab, wo die DB ist, wie viel sie geladen wird und ob Sie mehr als eine Anwendungsinstanz ausführen müssen (dann müssten sie diese Datei im Netzwerk freigeben und sie ist nicht mehr lokal).

1

Optimieren Sie zuerst Ihre Abfragen! Verwenden Sie dann Memcache oder ein ähnliches Caching-System für Daten, auf die häufig zugegriffen wird, und dann können Sie das Datei-Caching hinzufügen. Wir verwenden alle drei kombiniert und es läuft sehr glatt. Kleine optimierte Abfragen sind nicht so schlecht. Wenn sich Ihre Datenbank im lokalen Server befindet - Netzwerk ist kein Problem. Und fälschen Sie nicht den MySQL Query Cache (ich nehme an, Sie benutzen MySQL).

1

Wo ist Ihr Leistungsengpass?

Wenn Sie den Engpass nicht kennen, können Sie keine sinnvolle Bewertung über Optimierungen vornehmen.

Sammeln Sie einige Metriken und optimieren Sie entsprechend.

0

Hier sind die Muster, die für mich arbeiten, wenn ich PHP/MySQL-Site-Code Refactoring bin.

Die Anzahl der Abfragen pro Seite ist absolut entscheidend - eine komplexe Abfrage mit Joins ist am schnellsten, solange die Indizes korrekt sind. Eine einzelne Seite kann nach meiner Erfahrung fast immer mit fünf oder weniger Abfragen generiert werden, plus eine gute Verwendung von Klassen und Klassen. Oft eine Abfrage für die Sitzung und eine Abfrage für die App.

Nach den Indizes ist die größte Sache, an der gearbeitet wird, die Caching-Konfigurationsparameter.

Niemals Abfragen in Schleifen.

Das Verschieben von Datenbankabfragen in Dateien war noch nie eine sinnvolle Strategie, vor allem, weil es oft dazu führt, dass die Abfrageintegrität nicht mehr gewährleistet ist.

Alex und die anderen haben recht mit dem Testen.Wenn Ihre Seiten merklich langsam sind, dann sind sie aus einem Grund (oder Gründen) langsam - beginnen Sie nicht einmal etwas zu ändern, bis Sie die Gründe kennen und die Konsequenzen Ihrer Änderungen messen können. Refactoring durch Raten ist immer eine Verluststrategie, besonders wenn (wie in Ihrem Fall) Komplexität hinzugefügt wird.

Verwandte Themen