繁体   English   中英

Logstash具有巨大的mysql结果集

[英]logstash with huge mysql result set

我正在处理从MySQL到Elasticsearch的复制数据,所以我使用Logstash进行复制,但是问题是在mysql中有一个具有很多关系的产品表,并且select查询包含46个左外部联接,因此返回的结果非常庞大它仅对表产品的单个记录返回大约50000(50k)行,这使得复制性能很慢,因此我需要问是否还有其他解决方案可以执行复制,以及如何解决性能问题并获得巨大结果

具有关系的产品样本(并非全部):

产品及其关系

这就是elasticsearch映射:

弹性搜索映射

您需要利用mysql中的json数据类型 这里的范例是在实际的索引过程之前处理所有这些漂亮的数据。 您运行一个存储过程来处理数据并将其存储在一个大的平面表中。 您所有的关系都作为json对象存储在json字段中(这当然很合理)。 然后,将这些关系索引为elasticsearch中的嵌套数据类型 然后,您可以对其进行汇总以获得期望的结果。 奇迹般有效!

例如:

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 Server,所以如果您发现语法错误,请原谅我。 tag_product_as_json将为json数据类型,并将包含所有具有相同product_id的行。 您可以在那里存储很多行。 这个例子很基础。 您可以使用公用表表达式以更节省内存的方式获得类似的结果,但是它更加复杂并且超出了本主题的范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM