sql >> Base de Datos >  >> RDS >> Mysql

Indexe una base de datos MySQL con Apache Lucene y manténgala sincronizada

Mientras permita que la indexación/reindexación se ejecute por separado de su aplicación, tendrá problemas de sincronización. Dependiendo de su campo de trabajo, esto podría no ser un problema, pero para muchas aplicaciones de usuarios simultáneos sí lo es.

Tuvimos los mismos problemas cuando teníamos un sistema de trabajo que ejecutaba la indexación asincrónica cada pocos minutos. Los usuarios encontrarían un producto usando el motor de búsqueda, luego, incluso cuando una persona administrativa eliminó el producto de la pila de productos válidos, aún lo encontró en la interfaz, hasta que se ejecutó el siguiente trabajo de reindexación. Esto conduce a errores muy confusos y rara vez reproducibles informados al soporte de primer nivel.

Vimos dos posibilidades:conectar la lógica empresarial estrechamente a las actualizaciones del índice de búsqueda o implementar una tarea de actualización asincrónica más estricta. Hicimos lo último.

En segundo plano, hay una clase que se ejecuta en un subproceso dedicado dentro de la aplicación Tomcat que recibe actualizaciones y las ejecuta en paralelo. Los tiempos de espera para las actualizaciones de back office para frontend se han reducido a 0,5-2 segundos, lo que reduce en gran medida los problemas para el soporte de primer nivel. Y, está tan poco acoplado como puede ser, incluso podríamos implementar un motor de indexación diferente.