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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top