Как синхронизировать базу данных MySQL с сервисом Amazon OpenSearch

#mysql #elasticsearch #amazon-elasticsearch

Вопрос:

Я новичок в сервисе Amazon OpenSearch и хочу знать, могу ли я синхронизировать базу данных MySQL с Opensearch в режиме реального времени. Я подумал о Logstash , но, похоже, он не поддерживает операции удаления и обновления, которые могут не обновить мой кластер OpenSearch

Ответ №1:

Я собираюсь прокомментировать Elasticsearch, так как это тег, используемый для этого вопроса.

Ты можешь:

  • Считывание из базы данных ( SELECT * from TABLE )
  • Преобразуйте каждую запись в документ JSON
  • Отправьте документ json в elasticsearch, предпочтительно с помощью _bulk API.

Logstash может помочь в этом. Но я бы рекомендовал по возможности изменить уровень приложения и отправлять данные в elasticsearch в той же «транзакции», в которой вы отправляете свои данные в базу данных.

Я поделился там большинством своих мыслей: http://david.pilato.fr/blog/2015/05/09/advanced-search-for-your-legacy-application/

Взгляните также на эту запись «живого кодирования».


Примечание: Если вы хотите запустить Elasticsearch, ознакомьтесь с Cloud by Elastic, который также доступен при необходимости в AWS Marketplace, Azure Marketplace и Google Cloud Marketplace.

Cloud by elastic-это один из способов получить доступ ко всем функциям, управляемым нами. Подумайте о том, что еще есть, например, Безопасность, Мониторинг, Отчетность, SQL, Холст, пользовательский интерфейс карт, Оповещение и встроенные решения под названием Наблюдаемость, Безопасность, Корпоративный поиск и что будет дальше 🙂 …

Отказ от ответственности: В настоящее время я работаю в Elastic.

Комментарии:

1. Как обеспечить согласованность обеих систем в случае успеха базы данных и сбоя elasticsearch без отката транзакции?

2. Вы можете откатить базу данных, но ИМО лучше не откатывать и регистрировать эту информацию. Таким образом, вы не потеряете то, что ввел пользователь. Затем вам нужно снова отправить данные в ES. Или вы можете записать неудачный документ в систему очереди сообщений и, как только ES вернется, прочитать очередь и снова проиндексировать документы.

3. Исходя из вашего опыта, считаете ли вы, что лучше отправлять данные в базу данных и сообщение в систему очередей (которая в конечном итоге отправит те же данные в elasticsearch) ИЛИ, возможно, отправлять данные в базу данных, а затем в elasticsearch напрямую, и только в случае сбоя elasticsearch я бы отправил их в систему очереди сообщений вместо этого?

Ответ №2:

Сохраните столбец, в котором указано, когда строка была изменена в последний раз, тогда вы сможете выполнять обновления для OpenSearch. Аналогично для удаления просто укажите столбец, указывающий, удален он или нет (мягкое удаление), и дату его удаления.

С помощью этого дизайна БД вы можете отправлять действия «удалить» или «обновить» в OpenSearch/ElasticSearch для обновления/удаления индексов на основе даты последнего изменения / удаления. Позже вы можете выполнить запланированное техническое обслуживание, чтобы навсегда удалить эти строки из таблицы базы данных.

Наконец, эта статья может помочь вам в том, как синхронизировать Elasticsearch с реляционной базой данных с помощью Logstash и JDBC