Как построить эластичные поисковые индексы для данных, хранящихся в кэше Java-приложений? - PullRequest
0 голосов
/ 04 июля 2018

У меня есть API для чтения, написанный на Java, который читает данные из файловой системы. Данные записываются в файловую систему скриптами Perl.

Чтобы добиться лучшей производительности от API-интерфейсов чтения, я поддерживаю кэш в памяти (в основном хэш-карту внутри самого java-приложения) для кэширования данных за последние 7 дней из файловой системы. Для достижения этого при каждом запуске приложения выделенный поток заботится о считывании данных из файловой системы за последние 7 дней и обновлении кэша. И я также создал поток, который просыпается каждые 30 секунд и обновляет кеш (читает записи из ФС и обновляет / добавляет в кеш).

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

Один из способов, который я обдумал для достижения этой цели:

  1. Всякий раз, когда Java-приложение создает поток, который читает данные за 7 дней из файловой системы, можно также вызывать API эластичного поиска для создания индексов. Этот поток удалит все старые индексы из ES. Это необходимо для обеспечения того, чтобы данные в кэше и данные в ES совпадали при запуске приложения.
  2. Аналогично, поток, который просыпается каждые 30 секунд для обновления кэша, должен также вызывать API эластичного поиска для обновления индексов эластичного поиска.

Я не уверен, как я могу сделать эту систему отказоустойчивой. То есть может быть время, когда вызов эластичного поиска из потока, который просыпается каждые 30 секунд, не будет выполнен. При этом данные в кеше приложения и данные, проиндексированные с помощью Elastic Search, не будут синхронизированы. Как я могу предотвратить это?

Есть ли какой-нибудь лучший подход для построения поиска по этим данным?

Должен ли я вместо этого использовать люцен?

...