sql >> Database >  >> RDS >> Mysql

Indexeer een MySQL-database met Apache Lucene en houd ze gesynchroniseerd

Zolang u het indexeren/herindexeren los van uw toepassing laat lopen, krijgt u synchronisatieproblemen. Afhankelijk van uw werkgebied is dit misschien geen probleem, maar voor veel gelijktijdige gebruikerstoepassingen is dat wel het geval.

We hadden dezelfde problemen toen we een taaksysteem hadden met asynchrone indexering om de paar minuten. Gebruikers zouden een product vinden met behulp van de zoekmachine, en zelfs wanneer een administratieve persoon het product uit de geldige productstapel verwijderde, vond het nog steeds in de frontend, totdat de volgende herindexeringstaak werd uitgevoerd. Dit leidt tot zeer verwarrende en zelden reproduceerbare fouten die aan de eerstelijnsondersteuning worden gemeld.

We zagen twee mogelijkheden:ofwel sluit de bedrijfslogica nauw aan op updates van de zoekindex, of implementeer een strakkere asynchrone updatetaak. Dat laatste hebben we gedaan.

Op de achtergrond draait een klasse in een speciale thread in de tomcat-toepassing die updates opneemt en parallel uitvoert. De wachttijden voor backoffice-updates naar frontend zijn teruggebracht tot 0,5-2 seconden, wat de problemen voor eerstelijnsondersteuning aanzienlijk vermindert. En omdat het zo losjes mogelijk is gekoppeld, zouden we zelfs een andere indexeringsengine kunnen implementeren.



  1. MySQL onjuiste tekenreekswaardefout bij het opslaan van unicode-tekenreeks in Django

  2. Subquery met Bestaat 1 of Bestaat *

  3. IBM DB2 verbinden met IRI-software

  4. Wat is het doel van character_set_connection?