sql >> Databáze >  >> RDS >> Mysql

Indexujte databázi MySQL pomocí Apache Lucene a udržujte je synchronizované

Dokud necháte indexování/přeindexování běžet odděleně od vaší aplikace, budete mít problémy se synchronizací. V závislosti na oblasti vaší práce to nemusí být problém, ale u mnoha aplikací se souběžným uživatelem ano.

Měli jsme stejné problémy, když jsme měli systém úloh spouštějící asynchronní indexování každých pár minut. Uživatelé by našli produkt pomocí vyhledávače, a i když administrativní osoba odstranila produkt z platného zásobníku produktů, stále jej nacházela na frontendu, dokud neproběhla další úloha reindexace. To vede k velmi matoucím a zřídka reprodukovatelným chybám hlášeným na podporu první úrovně.

Viděli jsme dvě možnosti:Buď těsně propojit obchodní logiku s aktualizacemi vyhledávacího indexu, nebo implementovat přísnější úlohu asynchronní aktualizace. Udělali jsme to druhé.

Na pozadí běží třída ve vyhrazeném vláknu uvnitř aplikace kocour, která přijímá aktualizace a spouští je paralelně. Čekací doby na aktualizace backoffice na frontendu jsou 0,5-2 sekundy, což výrazně snižuje problémy s podporou první úrovně. A je to tak volně propojené, jak jen může být, mohli bychom dokonce implementovat jiný indexovací stroj.



  1. Zábava se zprávami

  2. Správně používat třídy v jiných třídách v php?

  3. Jak resetovat zastavovací slova v MYSQL?

  4. Existuje způsob, jak zobrazit klauzuli WHERE pouze pro jedno pole v MySQL?