Лучший способ синхронизации Elasticsearch с Mysql

Я использую elasticsearch в моем проекте spring web mvc (spring-data-elasticsearch) и для синхронизации с базой данных (MySQL).

Я индексирую документ из своего приложения, если какой-либо новый объект собирается добавить в таблицы БД в то же время, из уровня сервиса, я прошу индексировать этот документ в elasticsearch также.

обе таблицы БД и индекс elasticsearch имеют одинаковые данные и для удаления и обновления операции на Я использую ту же концепцию, выполняя операцию изменения на elasticsearch и таблица db, она работает нормально.

теперь я хочу знать, что будет disadvantages этого подхода.

или есть ли лучший способ сделать наш индекс elasticsearch актуальным из БД. Я использовал logstash, но как насчет удаленных объектов

1 ответов


недостатком синхронной индексации является отсутствие повторной попытки при возникновении ошибки при создании индексных данных.

на вашем месте я создам cronjob / batch ( для триггера это зависит от того, сколько данных обновляется и насколько важно обновление индекса ) и это задание будет иметь статус выполнения с logs

У вас будет четкое представление о вашем индексе и отсутствующих данных

и для индексов вы можете режим полного индекса и режим обновления индексов ( вы должны добавить дату обновления в свои таблицы)

стратегия индексирования у вас есть два этапа, и вы можете выбрать TWO_PHASES : вам нужен master & slave ==> при выполнении индексирования на master slave будет отвечать на запросы, и когда индексирование закончится, вы синхронизируете DIRECT_MODE : drop index & create new one