一种MySql数据同步到ES的方法、装置、终端及存储介质制造方法及图纸

技术编号:36987949 阅读:22 留言:0更新日期:2023-03-25 18:05
本发明专利技术公开了一种MySQL数据同步到ES的方法、装置、终端及存储介质,该方法先开启MySQL binlog日志,使用row模式,并设置server_id;在项目的配置文件中配置ES索引生成规则;构建并初始化ES索引,将对应的MySQL表全表数据同步到ES索引中;监听MySQL binlog日志,将有变化的数据表同步到ES索引中;生成.db文件并记录mysql

【技术实现步骤摘要】
一种MySql数据同步到ES的方法、装置、终端及存储介质


[0001]本专利技术涉及计算机软件
,尤其涉及一种MySql数据同步到ES的方法、装置、终端及存储介质。

技术介绍

[0002]在项目实施过程中,由于MySQL对全文检索或模糊查询支持的能力不强,需要将数据发送到搜索引擎(如ElasticSearch)上,由搜索引擎来提供专业的服务。在实践中我们总结出了以下几种方式。
[0003]1同步双写这是一种最为简单的方式,在将数据写到mysql时,同时将数据写到ES。
[0004]优点:业务逻辑简单。
[0005]缺点:1、硬编码,有需要写入mysql的地方都需要添加写入ES的代码;2、业务强耦合;3、存在双写失败丢数据风险;4、性能较差:本来mysql的性能不是很高,再加一个ElasticSearch,系统的性能必然会下降。
[0006]附:上面说的双写失败风险,包括以下几种:1)ES系统不可用;2)程序和ES之间的网络故障;3)程序重启,导致系统来不及写入ES等。
[0007]针对这种情况,有数据强一致性要求的,就必须双写放到事物中来处理,而一旦用上事物,则性能下降更加明显。
[0008]2异步双写(MQ方式)针对上面同步的性能和丢数据问题,可以考虑引入MQ,通过消息推送的方案。由于MQ的性能基本比mysql高出一个数量级,所以性能可以得到显著的提高。
[0009]优点:性能高;不存在丢数据问题。
[0010]缺点:1)还存在硬编码、业务强耦合等问题;2)系统中增加了mq的代码,复杂度增加;3)可能存在时延问题,程序的写入性能提高了,但是由于MQ的消费可能由于网络或其它原因导致用户写入的数据不一定可以马上看到。
[0011]3异步双写(Worker方式)上面两种方案中都存在硬编码问题,也就是有任何对mysq进行增删改查的地方要么植入ES代码,要么替换为MQ代码,代码的侵入性太强,若是实时要求不高的情况下,可以考虑用定时器来处理,具体步骤如下:1)数据库的相关表中增加一个字段为timestamp的字段,任何crud操作都会导致该字段的时间发生变化;2)原来程序中的crud操作不做任何变化;3)增加一个定时器程序(类似Worker),让该程序按一定的时间周期扫描指定的表,把该时间段内发生变化的数据提取出来;4)逐条写入到ES中。
[0012]优点:不改变原来代码,没有侵入性、没有硬编码;没有业务强耦合;不改变原来程序的性能;Worker代码编写简单不需要考虑增删改查。
[0013]缺点:时效性较差,由于定时器工作周期不可能设在秒级,所以实时性没有上面两种好;对数据库有一定的轮询压力,一种改进方法是将轮询放到压力不大的从库上。

技术实现思路

[0014]本专利技术的目的在于克服以上三种方案的弊端,将数据发送到搜索引擎ElasticSearch上,由搜索引擎来提供专业的服务,提供一种MySQL数据同步到ES方法、装置、终端及存储介质,通过本方案代码没有侵入业务系统、没有硬编码,无论MySQL表结构如何变化不需要单独编写创建ElasticSearch索引、没有时延、部署简单方便,只需要修改ElasticSearch和MySQL的连接地址以及索引规则生成即可完成数据的迁移的同步工作。
[0015]本专利技术的目的是通过以下技术方案来实现的:一种MySQL数据同步到ES方法,包括以下步骤:步骤一:开启MySQL binlog日志,使用row模式,并设置server_id;步骤二:在项目的配置文件中配置ES索引生成规则;步骤三:全量数据同步,构建并初始化ES索引,将对应的MySQL表全表数据同步到ES索引中;步骤四:增量数据同步,监听MySQL binlog日志,将有变化的数据表同步到ES索引中;步骤五:生成.db文件,并记录mysql

binlog文件位置到.db文件。
[0016]具体的,步骤二中的ES索引生成规则包含server_id、mysql连接信息、ElasticSearch连接信息、需要同步的数据库名称、需要同步的数据库表名和ElasticSearch索引别名。
[0017]具体的,步骤三具体为:启动程序,初始化步骤二中的配置文件,检查ElasticSearch中是否包含需要同步数据库表的索引,若不存在则通过Java API自动建立ES索引及mapping,并设置分词器为ik_max_word;ES索引创建规则为表名作为索引名称,索引别名创建规则为数据库名+“_”+表名;ES索引创建完成后全量同步MySQL数据库表中的数据到ES索引。
[0018]具体的,步骤四具体为:如果ElasticSearch中已经存在配置文件中需要同步的数据库表索引,则监听MySQL binlog日志中有变化的数据表,根据mysql

binlog日志同步数据到ES索引。
[0019]进一步的,根据mysql

binlog日志同步数据到ES索引处理过程包括以下步骤:步骤S1,读取.db文件获取mysql

binlog文件位置,根据配置筛出需要的binlog文件;步骤S2,根据规则将binlog 文件数据写入到对应的ES索引中;其中,规则包括新增、删除和修改;新增是指binlog文件中的sql语句包含insert关键词;删除是指binlog文件中的sql语句包含delete关键词;修改是指binlog文件中的sql语句包含update关键词。
[0020]步骤S3,通过binlog文件的database和table数据获得文件对应的配置规则,根据该配置规则,把Data(即binlog文件)中的key

value构造成一个与对应ES索引相匹配的key

value map,同时包括数据类型的转换;步骤S4,binlog数据解析模块将生成的key

value map拼装成请求_bulk 接口的update payload,写入ElasticSearch,将key

valuemap 暂存到一个 slice 中,每200ms或slice长度达到预设长度时调用 ElasticSearch 的_bulk 接口,写入数据。
[0021]一种MySQL数据同步到ES的装置,采用上述的一种MySQL数据同步到ES的方法,包
括:文件配置模块,用于在项目的配置文件中配置ES索引生成规则;索引创建模块,用于在程序启动后首先会根据配置判断ES索引是否存在,若不存在则创建ES索引且全量加载数据至ES索引;数据同步模块,用于创建ES索引,将对应的MySQL表全表数据同步到ES索引中,并监听MySQL binlog日志,将MySQL binlog日志中有变化的数据表同步到ES索引中;binlog数据解析模块,用于解析binlog 文件数据,并将解析数据写入ElasticSearch中。...

【技术保护点】

【技术特征摘要】
1.一种MySQL数据同步到ES的方法,其特征在于,包括以下步骤:步骤一:开启MySQL binlog日志,使用row模式,并设置server_id;步骤二:在项目的配置文件中配置ES索引生成规则;步骤三:全量数据同步,构建并初始化ES索引,将对应的MySQL表全表数据同步到ES索引中;步骤四:增量数据同步,监听MySQL binlog日志,将有变化的数据表同步到ES索引中;步骤五:生成.db文件,并记录mysql

binlog文件位置到.db文件。2.根据权利要求1所述的一种MySQL数据同步到ES的方法,其特征在于,所述步骤二中的ES索引生成规则包含server_id、mysql连接信息、ElasticSearch连接信息、需要同步的数据库名称、需要同步的数据库表名和ElasticSearch索引别名。3.根据权利要求1所述的一种MySQL数据同步到ES的方法,其特征在于,所述步骤三具体为:启动程序,初始化步骤二中的配置文件,检查ElasticSearch中是否包含需要同步数据库表的索引,若不存在则通过Java API自动建立ES索引及mapping,并设置分词器为ik_max_word;ES索引创建规则为表名作为索引名称,索引别名创建规则为数据库名+“_”+表名;ES索引创建完成后全量同步MySQL数据库表中的数据到ES索引。4.根据权利要求1所述的一种MySQL数据同步到ES的方法,其特征在于,所述步骤四具体为:如果ElasticSearch中已经存在配置文件中需要同步的数据库表索引,则监听MySQL binlog日志中有变化的数据表,根据mysql

binlog日志同步数据到ES索引。5.根据权利要求4所述的一种MySQL数据同步到ES的方法,其特征在于,所述根据mysql

binlog日志同步数据到ES索引的处理过程包括以下步骤:步骤S1,读取.db文件获取mysql

binlog文件位置,根据配置筛出需要的binlog文件;步骤S2,根据规则将binlog 文件...

【专利技术属性】
技术研发人员:覃进千赵奎王勇王震周欣
申请(专利权)人:创意信息技术股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1