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

Indicizza un database MySQL con Apache Lucene e mantienili sincronizzati

Finché lasci eseguire l'indicizzazione/reindicizzazione separatamente dalla tua applicazione, avrai problemi di sincronizzazione. A seconda del tuo campo di lavoro, questo potrebbe non essere un problema, ma per molte applicazioni simultanee lo è.

Abbiamo avuto gli stessi problemi quando avevamo un sistema di lavoro che eseguiva l'indicizzazione asincrona ogni pochi minuti. Gli utenti trovavano un prodotto utilizzando il motore di ricerca, quindi anche quando una persona amministrativa rimuoveva il prodotto dallo stack di prodotti valido, lo trovava comunque nel frontend, fino all'esecuzione del successivo processo di reindicizzazione. Ciò porta a errori molto confusi e raramente riproducibili segnalati al supporto di primo livello.

Abbiamo visto due possibilità:collegare strettamente la logica aziendale agli aggiornamenti dell'indice di ricerca o implementare un'attività di aggiornamento asincrono più rigorosa. Abbiamo fatto quest'ultimo.

In background, c'è una classe in esecuzione in un thread dedicato all'interno dell'applicazione Tomcat che prende gli aggiornamenti e li esegue in parallelo. I tempi di attesa per gli aggiornamenti del backoffice al frontend sono scesi a 0,5-2 secondi, il che riduce notevolmente i problemi per il supporto di primo livello. Inoltre, è il più liberamente accoppiato possibile, potremmo persino implementare un motore di indicizzazione diverso.