sql >> Databasteknik >  >> RDS >> Mysql

Indexera en MySQL-databas med Apache Lucene och håll dem synkroniserade

Så länge du låter indexeringen/omindexeringen köras separat från din applikation kommer du att få synkroniseringsproblem. Beroende på ditt arbetsområde kanske detta inte är ett problem, men för många samtidiga användare är det det.

Vi hade samma problem när vi hade ett jobbsystem som körde asynkron indexering med några minuters mellanrum. Användare skulle hitta en produkt med hjälp av sökmotorn, även när en administrativ person tog bort produkten från den giltiga produktstapeln, hittade den den fortfarande i frontend, tills nästa återindexeringsjobb kördes. Detta leder till mycket förvirrande och sällan reproducerbara fel som rapporteras till support på första nivån.

Vi såg två möjligheter:Antingen koppla affärslogiken tätt till uppdateringar av sökindexet, eller implementera en stramare asynkron uppdateringsuppgift. Vi gjorde det senare.

I bakgrunden finns det en klass som körs i en dedikerad tråd inuti tomcat-applikationen som tar uppdateringar och kör dem parallellt. Väntetiderna för backoffice-uppdateringar till frontend är nere på 0,5-2 sekunder, vilket avsevärt minskar problemen för support på första nivån. Och den är så löst kopplad som möjligt, vi skulle till och med kunna implementera en annan indexeringsmotor.



  1. Kontrollera om en rad finns, annars infogas

  2. lagra långa värden i Android-databasen

  3. Hur ändrar jag tabellkolumns datatyp på mer än 1 kolumn?

  4. Hur SQLite Length() fungerar