#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