Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Indizieren Sie eine MySQL-Datenbank mit Apache Lucene und halten Sie sie synchron

Solange Sie die Indizierung/Neuindizierung getrennt von Ihrer Anwendung laufen lassen, werden Sie Synchronisationsprobleme bekommen. Abhängig von Ihrem Arbeitsbereich ist dies möglicherweise kein Problem, aber für viele Concurrent-User-Anwendungen schon.

Wir hatten die gleichen Probleme, als wir ein Jobsystem hatten, das alle paar Minuten eine asynchrone Indizierung ausführte. Benutzer würden ein Produkt mithilfe der Suchmaschine finden, und selbst wenn eine Verwaltungsperson das Produkt aus dem gültigen Produktstapel entfernte, wurde es immer noch im Frontend gefunden, bis der nächste Neuindizierungsjob ausgeführt wurde. Dies führt zu sehr verwirrenden und selten reproduzierbaren Fehlern, die dem First-Level-Support gemeldet werden.

Wir haben zwei Möglichkeiten gesehen:Entweder die Geschäftslogik eng mit Aktualisierungen des Suchindex verbinden oder eine strengere asynchrone Aktualisierungsaufgabe implementieren. Letzteres haben wir gemacht.

Im Hintergrund läuft eine Klasse in einem dedizierten Thread innerhalb der Tomcat-Anwendung, die Updates entgegennimmt und parallel ausführt. Die Wartezeiten für Backoffice-Updates zum Frontend sind auf 0,5-2 Sekunden gesunken, was die Probleme für den First-Level-Support stark reduziert. Und da es so lose gekoppelt ist, könnten wir sogar eine andere Indizierungs-Engine implementieren.