2016-08-28 3 views
2

Я использую весна-данных-JPA для сохранения данных в MySql и я недавно внедренная весна-данных-elasticsearch для вставки данных в ES на INSERT (например, новое фото загружается).Как сохранить данные elasticsearch в синхронизации с MySql?

Теперь очевидно, что это только вставляет исходные данные, вскоре после этого он станет устаревшим.

Давайте Instagram как пример:

  1. Вы отправляете фото
    • Фото (объект фото - описание, местоположение, метки)
    • Пользователь (Пользователь, разместивший)
    • Нет понравилось (0)
    • Комментариев нет (0)

Все эти данные будут вставлены под фото индексом в elasticsearch. Когда пользователи начинают нравится и комментируя на фото, данные будут stale.

Как мы можем исправить это ?!

ли мы создать cronjob/задание который бы пройти через все фотографий и вставить каждый из них в elasticsearch каждые Х минут (это будет означать удаление всех текущих индексов для фотография) ?! Это похоже, что потребуется много времени и использовать много ресурсов!

Вместо того, чтобы вставлять все данные снова, мы бы просто обновили все текущие индексы поиска elasticsearch?

Что вы сделали для решения этой проблемы?

ответ

3

Стандартный способ сделать это - сохранить последний обновленный тип столбца в базе данных и обновить его всякий раз, когда есть изменение.

Затем вашему индексу просто нужно запросить что-либо из базы данных с момента последнего успешного индексирования данных.

В зависимости от того, насколько надежным вы можете это сделать, вам все равно необходимо периодически проводить полное сравнение.