Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Indexe um banco de dados MySQL com o Apache Lucene e mantenha-os sincronizados


Contanto que você deixe a indexação/reindexação ser executada separadamente do seu aplicativo, você terá problemas de sincronização. Dependendo do seu campo de trabalho, isso pode não ser um problema, mas para muitos aplicativos de usuários simultâneos é.

Tínhamos os mesmos problemas quando tínhamos um sistema de trabalho executando indexação assíncrona a cada poucos minutos. Os usuários encontrariam um produto usando o mecanismo de pesquisa e, mesmo quando uma pessoa administrativa removesse o produto da pilha de produtos válida, ainda o encontraria no frontend, até que o próximo trabalho de reindexação fosse executado. Isso leva a erros muito confusos e raramente reproduzíveis relatados ao suporte de primeiro nível.

Vimos duas possibilidades:conectar a lógica de negócios firmemente às atualizações do índice de pesquisa ou implementar uma tarefa de atualização assíncrona mais rígida. Fizemos o último.

Em segundo plano, há uma classe em execução em um thread dedicado dentro do aplicativo tomcat que recebe atualizações e as executa em paralelo. Os tempos de espera para atualizações de backoffice para frontend são de 0,5 a 2 segundos, o que reduz bastante os problemas de suporte de primeiro nível. E, com o acoplamento mais fraco possível, poderíamos até implementar um mecanismo de indexação diferente.