当前位置: 首页 > 网络应用技术

弹性实际战斗:运河同步mysql to es父亲和儿子表数据同步|对象阵列同步|嵌套阵列同步

时间:2023-03-07 11:09:04 网络应用技术

  最近,MySQL与ES的数据同步涉及父亲和儿子表的数据同步,此特此记录在此供后续参考

  有关MySQL同步的操作详细信息,您可以参考我以前的博客:弹性实际战斗:实现MySQL8.0数据增加/全量同步到Elasticsearch7.x通过运河1.1.5

  相关配置实际上在官方文档中包含示例。以下也基于这些示例。

  此方法针对数组中的数据作为基本类型,例如列表,列表等。

  SQL支持多表面相关的自由组合,但是有某些限制:

  1.主表无法查询孩子的语句

  2.您只能使用左外连接,也就是说,最左的表必须是主表

  3.从桌子上进行校正,如果有孩子查询,则无法有多个表格

  4.在主SQL中无法进行查询(可以从表查询中可用,但不建议进行该条件,这可能会导致数据同步不一致,例如在任何条件下修改字段内容)

  5.相关条件仅允许“ ='主外部钥匙的操作”具有其他恒定判断,例如:on a.role_id = b.id and b.statues = 1

  6.相关条件必须具有出现在主要查询语句中的字段,例如:on a.role_id = b.id。

  7.弹性搜索的映射属性将对应于SQL的查询值(不支持SELECT *),例如:SELECT A.ID为_id,a.name,A.Email,A.Email as _Email as _ email as _ email,其中名称将映射到esmapping的eSmapping's提交的名称,_Email将映射到绘制映射的_Email,以别名(如果您有别名)作为最终映射字段。这里的_id可以填写配置文件_id:_id映射

  ES映射(某些字段已被排除在外)

  1. SQL与左联接的子计数数据相关

  2.将配置添加到适配器配置文件

  整体运河适配器/conf/es7中的配置文件:comment.yml

  3.启动适配器

  4.修改相应数据库表中的数据,然后查看日志

  我发现已经有更新的数据5.查看ES中的数据

  发现标签中的数据已同时更新,并且是数组形式。修改子计数据后,它也将同时更新

  将配置文件中的_id映射调整为_id。请注意,SQL中的别名必须为_id。

  SQL

  此方法针对数组中的自定义对象的数据。例如

  对于这种类型的同步,该官员没有明确的示例描述,但是观察官方文件会发现官员提供对象 - 型字段的同步

  尽管这种类型的官方描述更针对一个-to -to -One JSON类型字符串,但您可能希望尝试查看是否可以支持JSON类型数组

  运河中的对象是已识别的JSON类型字符串,因此我们的想法是将子表数据转换为JSON字符串,然后通过对象将其转换为JSON字符串

  1. ES映射

  2. SQL

  3.适配器配置文件

  4.整体配置文件

  5.启动适配器

  6.修改相应数据库表中的数据,然后检查日志,您会发现日志中的数据输出

  7.查询索引数据,请注意,由于它是NSSested结构,请使用嵌套查询

  您会发现刚刚修改的信息已更新

  此错误是由JSON标识中缺乏必要符号引起的,因为我们上述方法是将对象类型数组转换为JSON数组。JSON数组需要是符号。

  SO称为JOIN类型是指ES中的JOIN数据类型。这种类型适合以下条件。1.来自父和儿子的结构的数据2.减法数据明显超过父表数据

  连接类型不能像关系数据库中的表连接一样使用。无论是has_child还是has_parent查询,它都会对索引的查询性能产生严重的负面影响,并会触发全球序列。因此,父亲和儿子的结构不能使用JOIN类型。首先考虑上述两种方法,然后在亚表图数据远远超过父表数据时考虑它。

  (由于暂时没有应用程序要求,因此根据官方文档给出以下配置描述,并将在将来不断更新。)1。ES映射

  2.适配器/es7/customer.yml

  3.适配器/ES7/order.yml配置文件

  4.开始服务