MySQL-Speicher laden von Javascript Live-Suche
-
28-10-2019 - |
Frage
Ich führe eine Live-Suche durch ein Textfeld durch, das beim Eingeben eines Benutzers übereinstimmende Zeilen aus einer MySQL-Datenbank zurückgibt.Das Problem ist, dass dies eine der Hauptfunktionen der Site ist und die Speicherlast in meiner MySQL-Datenbank wirklich erhöht hat.Weil jeder Tastendruck eine Anfrage an das PHP-Skript sendet, um die Datenbank abzufragen.
Ich habe PHP ignoriert einen Suchbegriff mit weniger als 3 Zeichen, aber was könnte ich sonst noch tun?
Hier gibt es einige Optionen: Optimierung der Live-Suche in Javascript
Aber ich habe mich gefragt, ob ich aus einem zwischengespeicherten XML-Blatt ziehen soll oder ob es eine Möglichkeit gibt, MySQL selbst zwischenzuspeichern.
Was macht Google oder einige der anderen großen Websites, die stark auf diese Funktion angewiesen sind?
Lösung
Ich würde versuchen, die SQL-Abfrage so weit wie möglich zu optimieren:
- no SELECT *
- no JOIN
- Verwenden Sie das WHERE nur in indizierten Feldern
Auch auf der PHP-Seite:
- Zwischenspeichern Sie die Suchergebnisse nach den am häufigsten gesuchten Begriffen (je häufiger die gesuchten Daten aktualisiert werden, desto kürzer ist die Cache-Lebensdauer) in Klartextdateien
- Verwenden Sie Redis, wenn möglich zwischengespeichert
Betrachten Sie auch eine parallele NoSQL-Datenbank
Und
Zend_Search_Lucene eignet sich hervorragend für Websites mit geringem oder mittlerem Datenverkehr (es treten Berichten zufolge Probleme bei der Skalierung auf)
Andere Tipps
Verwenden Sie Indizierungsmaschinen, um Ihre Daten zu indizieren und Ihre Suchergebnisse zu beschleunigen. Wie zum Beispiel: http://sphinxsearch.com/ oder http://lucene.apache.org/core/
Richten Sie einen Cron-Job ein, um Daten zu indizieren. Es gibt eine PHP-API für Sphinx und ein Zend Framework-Modul.Indizierungsgeschwindigkeit uo Dinge viel, wenn richtig verwendet.