一种MySql数据同步到ES的方法、装置、终端及存储介质与流程

文档序号:33620466发布日期:2023-03-25 11:27阅读:146来源:国知局
一种mysql数据同步到es的方法、装置、终端及存储介质
技术领域
:1.本发明涉及计算机软件
技术领域
:,尤其涉及一种mysql数据同步到es的方法、装置、终端及存储介质。
背景技术
::2.在项目实施过程中,由于mysql对全文检索或模糊查询支持的能力不强,需要将数据发送到搜索引擎(如elasticsearch)上,由搜索引擎来提供专业的服务。在实践中我们总结出了以下几种方式。3.1同步双写这是一种最为简单的方式,在将数据写到mysql时,同时将数据写到es。4.优点:业务逻辑简单。5.缺点:1、硬编码,有需要写入mysql的地方都需要添加写入es的代码;2、业务强耦合;3、存在双写失败丢数据风险;4、性能较差:本来mysql的性能不是很高,再加一个elasticsearch,系统的性能必然会下降。6.附:上面说的双写失败风险,包括以下几种:1)es系统不可用;2)程序和es之间的网络故障;3)程序重启,导致系统来不及写入es等。7.针对这种情况,有数据强一致性要求的,就必须双写放到事物中来处理,而一旦用上事物,则性能下降更加明显。8.2异步双写(mq方式)针对上面同步的性能和丢数据问题,可以考虑引入mq,通过消息推送的方案。由于mq的性能基本比mysql高出一个数量级,所以性能可以得到显著的提高。9.优点:性能高;不存在丢数据问题。10.缺点:1)还存在硬编码、业务强耦合等问题;2)系统中增加了mq的代码,复杂度增加;3)可能存在时延问题,程序的写入性能提高了,但是由于mq的消费可能由于网络或其它原因导致用户写入的数据不一定可以马上看到。11.3异步双写(worker方式)上面两种方案中都存在硬编码问题,也就是有任何对mysq进行增删改查的地方要么植入es代码,要么替换为mq代码,代码的侵入性太强,若是实时要求不高的情况下,可以考虑用定时器来处理,具体步骤如下:1)数据库的相关表中增加一个字段为timestamp的字段,任何crud操作都会导致该字段的时间发生变化;2)原来程序中的crud操作不做任何变化;3)增加一个定时器程序(类似worker),让该程序按一定的时间周期扫描指定的表,把该时间段内发生变化的数据提取出来;4)逐条写入到es中。12.优点:不改变原来代码,没有侵入性、没有硬编码;没有业务强耦合;不改变原来程序的性能;worker代码编写简单不需要考虑增删改查。13.缺点:时效性较差,由于定时器工作周期不可能设在秒级,所以实时性没有上面两种好;对数据库有一定的轮询压力,一种改进方法是将轮询放到压力不大的从库上。技术实现要素:14.本发明的目的在于克服以上三种方案的弊端,将数据发送到搜索引擎elasticsearch上,由搜索引擎来提供专业的服务,提供一种mysql数据同步到es方法、装置、终端及存储介质,通过本方案代码没有侵入业务系统、没有硬编码,无论mysql表结构如何变化不需要单独编写创建elasticsearch索引、没有时延、部署简单方便,只需要修改elasticsearch和mysql的连接地址以及索引规则生成即可完成数据的迁移的同步工作。15.本发明的目的是通过以下技术方案来实现的:一种mysql数据同步到es方法,包括以下步骤:步骤一:开启mysqlbinlog日志,使用row模式,并设置server_id;步骤二:在项目的配置文件中配置es索引生成规则;步骤三:全量数据同步,构建并初始化es索引,将对应的mysql表全表数据同步到es索引中;步骤四:增量数据同步,监听mysqlbinlog日志,将有变化的数据表同步到es索引中;步骤五:生成.db文件,并记录mysql-binlog文件位置到.db文件。16.具体的,步骤二中的es索引生成规则包含server_id、mysql连接信息、elasticsearch连接信息、需要同步的数据库名称、需要同步的数据库表名和elasticsearch索引别名。17.具体的,步骤三具体为:启动程序,初始化步骤二中的配置文件,检查elasticsearch中是否包含需要同步数据库表的索引,若不存在则通过javaapi自动建立es索引及mapping,并设置分词器为ik_max_word;es索引创建规则为表名作为索引名称,索引别名创建规则为数据库名+“_”+表名;es索引创建完成后全量同步mysql数据库表中的数据到es索引。18.具体的,步骤四具体为:如果elasticsearch中已经存在配置文件中需要同步的数据库表索引,则监听mysqlbinlog日志中有变化的数据表,根据mysql-binlog日志同步数据到es索引。19.进一步的,根据mysql-binlog日志同步数据到es索引处理过程包括以下步骤:步骤s1,读取.db文件获取mysql-binlog文件位置,根据配置筛出需要的binlog文件;步骤s2,根据规则将binlog文件数据写入到对应的es索引中;其中,规则包括新增、删除和修改;新增是指binlog文件中的sql语句包含insert关键词;删除是指binlog文件中的sql语句包含delete关键词;修改是指binlog文件中的sql语句包含update关键词。20.步骤s3,通过binlog文件的database和table数据获得文件对应的配置规则,根据该配置规则,把data(即binlog文件)中的key-value构造成一个与对应es索引相匹配的key-valuemap,同时包括数据类型的转换;步骤s4,binlog数据解析模块将生成的key-valuemap拼装成请求_bulk接口的updatepayload,写入elasticsearch,将key-valuemap暂存到一个slice中,每200ms或slice长度达到预设长度时调用elasticsearch的_bulk接口,写入数据。21.一种mysql数据同步到es的装置,采用上述的一种mysql数据同步到es的方法,包括:文件配置模块,用于在项目的配置文件中配置es索引生成规则;索引创建模块,用于在程序启动后首先会根据配置判断es索引是否存在,若不存在则创建es索引且全量加载数据至es索引;数据同步模块,用于创建es索引,将对应的mysql表全表数据同步到es索引中,并监听mysqlbinlog日志,将mysqlbinlog日志中有变化的数据表同步到es索引中;binlog数据解析模块,用于解析binlog文件数据,并将解析数据写入elasticsearch中。22.一种智能终端,该智能终端包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的一种mysql数据同步到es的程序,所述一种mysql数据同步到es的程序被所述处理器执行时实现如上述的一种mysql数据同步到es的方法的步骤。23.一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述的一种mysql数据同步到es的方法。24.本发明的有益效果:本发明没有侵入业务系统、没有硬编码,无论mysql表结构如何变化不需要单独编写创建elasticsearch索引、没有时延、部署简单方便,只需要修改elasticsearch和mysql的连接地址以及索引规则生成即可完成数据的迁移的同步工作。附图说明25.图1是本发明的方法步骤流程图;图2是本发明的总体技术流程图。具体实施方式26.为了对本发明的技术特征、目的和有益效果有更加清楚的理解,现对本发明的技术方案精选以下详细说明。显然,所描述的实施案例是本发明一部分实施例,而不是全部实施例,不能理解为对本发明可实施范围的限定。基于本发明的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的其他所有实施例,都属于本发明的保护范围。27.实施例一:本实施例中,如图1和图2所示,一种mysql数据同步到es方法,包括以下步骤:步骤一:开启mysqlbinlog日志,使用row模式,并设置server_id;步骤二:在项目的配置文件中配置es索引生成规则;步骤三:全量数据同步,构建并初始化es索引,将对应的mysql表全表数据同步到es索引中;步骤四:增量数据同步,监听mysqlbinlog日志,将有变化的数据表同步到es索引中;步骤五:生成.db文件,并记录mysql-binlog文件位置到.db文件。28.es(elasticsearch),elasticsearch是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。elasticsearch的实现原理主要分为以下几个步骤,首先用户将数据提交到elasticsearch数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。29.本实施例中,步骤二中的es索引生成规则包含server_id、mysql连接信息、elasticsearch连接信息、需要同步的数据库名称、需要同步的数据库表名和elasticsearch索引别名。30.本实施例中,步骤三具体为:启动程序,初始化步骤二中的配置文件,检查elasticsearch中是否包含需要同步数据库表的索引,若不存在则通过javaapi自动建立es索引及mapping,并设置分词器为ik_max_word;es索引创建规则为表名作为索引名称,索引别名创建规则为数据库名+“_”+表名;es索引创建完成后全量同步mysql数据库表中的数据到es索引。31.创建elasticsearch索引是通过javaapi建立索引及mapping,并设置分词器为ik_max_word,确保数据能够正确入库和搜索。32.本实施例中,步骤四具体为:如果elasticsearch中已经存在配置文件中需要同步的数据库表索引,则监听mysqlbinlog日志中有变化的数据表,根据mysql-binlog日志同步数据到es索引。33.增量数据同步通过监听mysqlbinlog日志,将有变化的数据表同步到elasticsearch索引中,包含新增、修改、删除;软件中途停止重新启动无需特殊操作,程序会在停止前自动记录好binlog文件位置到.db文件,下次启动会从原来的位置开始读取加载数据。34.其中,根据mysql-binlog日志同步数据到es索引处理过程包括以下步骤:步骤s1,读取.db文件获取mysql-binlog文件位置,根据配置筛出需要的binlog;步骤s2,根据规则决定binlog数据应该写入到哪个elasticsearch索引、文档_id对应的mysql字段、binlog中的各个mysql字段与索引mapping的对应关系和写入类型等;其中,规则包括新增、删除和修改;新增是指binlog文件中的sql语句包含insert关键词;删除是指binlog文件中的sql语句包含delete关键词;修改是指binlog文件中的sql语句包含update关键词。35.步骤s3:通过binlog的database和table可以命中一条配置规则,根据该配置规则,把data(即binlog文件)中的key-value构造成一个与对应elasticsearch索引相匹配的key-valuemap,同时包括一些数据类型的转换;步骤s4:binlog数据解析模块生成的key-valuemap,由该模块拼装成请求_bulk接口的updatepayload,写入elasticsearch。考虑到mysql频繁更新时对elasticsearch的写入压力,key-valuemap会暂存到一个slice中,每200ms或slice长度达到一定长度时(可以通过配置调整),才会调用elasticsearch的_bulk接口,写入数据。36.此外,本实施例中还提供了一种mysql数据同步到es的装置,采用上述的一种mysql数据同步到es的方法,包括:文件配置模块,用于在项目的配置文件中配置es索引生成规则;索引创建模块,用于在程序启动后首先会根据配置判断es索引是否存在,若不存在则创建es索引且全量加载数据至es索引;数据同步模块,用于创建es索引,将对应的mysql表全表数据同步到es索引中,并监听mysqlbinlog日志,将mysqlbinlog日志中有变化的数据表同步到es索引中;binlog数据解析模块,用于解析binlog文件数据,并将解析数据写入elasticsearch中。37.本实施例还提供了一种智能终端,该智能终端包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的一种mysql数据同步到es的程序,所述一种mysql数据同步到es的程序被所述处理器执行时实现如上述的一种mysql数据同步到es的方法的步骤。38.一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述的一种mysql数据同步到es的方法。39.实施例二:本实施例中,对比了现有相关技术,进一步阐述了本技术的优点,详细对比过程如下:本发明技术方案与
专利名称::为一种数据同步方法、系统及电子设备的技术方案相比,该对比文件存在的缺陷包括:1.canal作为开源的数据同步工具,需要安装canal服务端和监听客户端,包含了较多的组件和应用,运维保障相对复杂。40.2.canal目前仅支持es6和es7,对于高于es7的版本无法使用;3.canal在数据过虑能力方面:仅全量可添加where条件;4.该专利文件中需要将全量同步任务添加到分布式任务调度服务系统中才能实现全量同步操作,需要单独部署分布式任务调度服务系统,加大了系统的复杂度及易错性。41.本发明方案与
专利名称::为基于监听mysql数据库binlog变化实现数据同步的方法和系统技术方案相比,该对比文件存在的缺陷包括:1.该专利文件中需要配置数据加载的传输方式,基于tcp或http协议的同步传输方式,或者基于消息的异步传输方式。基于tcp传输需要对数据进行封包和解包需要很高的网络编程处理能力,tcp的crc校验位只有16位,当出现错误时,有1/65535的概率不能够被检测出来,不够可靠。http协议传输速度慢,数据包大,数据传输安全性差。基于消息的异步传输方式需要编写消费端程序来处理数据,加大了复杂性。42.2.该专利文件中将数据同步到es时,并没有创建es索引的能力,当mysql新增数据库表或者表结构改变时,无法动态创建es索引,导致新增的表数据无法实时同步。43.本发明方案与
专利名称::为将mysql数据库同步到elasticsearch的方法技术方案相比,该对比文件存在的缺陷包括:1.运维成本相对较高:包含了较多的组件和应用,运维保障相对复杂。2.稳定性风险较高:一环出问题会导致整个数据同步链路的稳定性受到影响。而且排查和定位问题也会比较困难。44.由上述对比内容可以看出,本发明与上述对比文件相比,通过本发明方案的代码没有侵入业务系统、没有硬编码,无论mysql表结构如何变化不需要单独编写创建elasticsearch索引、没有时延、部署简单方便,只需要修改elasticsearch和mysql的连接地址以及索引规则生成即可完成数据的迁移的同步工作,可解决上述对比文件存在的技术缺陷。45.以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护的范围由所附的权利要求书及其等效物界定。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1