Mysql
 sql >> Base de données >  >> RDS >> Mysql

Indexez une base de données MySQL avec Apache Lucene et maintenez-les synchronisées

Tant que vous laissez l'indexation/réindexation s'exécuter séparément de votre application, vous aurez des problèmes de synchronisation. Selon votre domaine de travail, cela peut ne pas être un problème, mais c'est le cas pour de nombreuses applications d'utilisateurs simultanés.

Nous avions les mêmes problèmes lorsque nous avions un système de tâches exécutant une indexation asynchrone toutes les quelques minutes. Les utilisateurs trouveraient un produit à l'aide du moteur de recherche, puis même lorsqu'un administrateur supprimait le produit de la pile de produits valides, le trouvait toujours dans le frontend, jusqu'à ce que la prochaine tâche de réindexation soit exécutée. Cela conduit à des erreurs très déroutantes et rarement reproductibles signalées au support de premier niveau.

Nous avons vu deux possibilités :soit connecter étroitement la logique métier aux mises à jour de l'index de recherche, soit implémenter une tâche de mise à jour asynchrone plus étroite. Nous avons fait ce dernier.

En arrière-plan, une classe s'exécute dans un thread dédié à l'intérieur de l'application tomcat qui prend les mises à jour et les exécute en parallèle. Les temps d'attente pour les mises à jour du backoffice vers le frontend sont réduits à 0,5-2 secondes, ce qui réduit considérablement les problèmes de support de premier niveau. Et, il est aussi lâche que possible, nous pourrions même implémenter un moteur d'indexation différent.