sql >> Database teknologi >  >> RDS >> Mysql

Indeks en MySQL-database med Apache Lucene, og hold dem synkroniserede

Så længe du lader indekseringen/genindekseringen køre separat fra din applikation, vil du have synkroniseringsproblemer. Afhængigt af dit arbejdsområde er dette muligvis ikke et problem, men for mange samtidige bruger-applikationer er det det.

Vi havde de samme problemer, da vi havde et jobsystem, der kørte asynkron indeksering med få minutters mellemrum. Brugere ville finde et produkt ved hjælp af søgemaskinen, så selv når en administrativ person fjernede produktet fra den gyldige produktstak, fandt det stadig i frontend, indtil det næste genindekseringsjob kørte. Dette fører til meget forvirrende og sjældent reproducerbare fejl rapporteret til support på første niveau.

Vi så to muligheder:Enten forbinder forretningslogikken tæt til opdateringer af søgeindekset, eller implementer en strammere asynkron opdateringsopgave. Vi gjorde det sidste.

I baggrunden er der en klasse, der kører i en dedikeret tråd inde i tomcat-applikationen, der tager opdateringer og kører dem parallelt. Ventetiderne på backoffice-opdateringer til frontend er nede på 0,5-2 sekunder, hvilket i høj grad reducerer problemerne for support på første niveau. Og det er så løst koblet som muligt, vi kunne endda implementere en anden indekseringsmotor.



  1. Brug af isql med en forbindelsesstreng

  2. Tjek statistikmål i PostgreSQL

  3. Opret en ny tabel ved at slå to tabeller sammen med union

  4. Hvordan sender man e-mail fra SQL Server?