logstash с огромным набором результатов MySQL - PullRequest
0 голосов
/ 13 июня 2019

Я работаю над репликацией данных из MySQL наasticsearch, поэтому я использую logstash для репликации, но проблема в том, что в mysql есть таблица продуктов, которая имеет много связей, и запрос на выборку содержит 46 левых внешних соединений, поэтому результат возвращаетсяочень большой, он возвращает около 50000 (50 тыс.) строк только для одной записи табличного продукта, что снижает производительность репликации, поэтому мне нужно спросить, есть ли какое-то другое решение для репликации и как я могу решить проблему производительности с огромнымирезультат

образец продукта с его отношениями (не все):

product with its relations

и это эластичное отображение поиска:

elasticsearch mapping

1 Ответ

1 голос
/ 16 июня 2019

Вам необходимо использовать тип данных json из mysql. Парадигма здесь состоит в том, чтобы сжать все эти прекрасные данные перед фактическим процессом индексации. Вы запускаете хранимую процедуру, которая обрабатывает данные и хранит их в одной большой плоской таблице. Все ваши отношения хранятся в виде объектов json в поле json (если, конечно, это имеет смысл). Затем вы индексируете эти отношения как вложенные типы данных в эластичном поиске. затем вы можете объединиться для получения желаемых результатов. Работает как шарм!

Например:

INSERT prod.id,
...,
(SELECT JSON_ARRAYAGG(JSON_OBJECT('color', color, 'size', size)) FROM tag_products where prod.id = tprod.product_id) AS tag_product_as_json,
INTO Elastic_Products FROM Products AS prod
LEFT JOIN tag_product AS tprod ON prod.id = tprod.product_id
...

Я больше похож на SQL-сервера, так что простите, если вы обнаружите какую-либо ошибку в синтаксисе. Tag_product_as_json будет иметь тип данных json и будет содержать все строки с одинаковым product_id. Вы можете хранить там много строк. Этот пример очень простой. Вы могли бы достичь аналогичных результатов более эффективным способом использования памяти, используя обычные табличные выражения, но это более сложно и выходит за рамки темы.

...