2016 - 2024

感恩一路有你

mysql两个库之间表数据同步 将SQLServer数据同步到MySQL用什么方法?

浏览量:3422 时间:2023-04-25 15:07:59 作者:采采

至于ES,我还没有 没有在实际项目中应用过(我自己学过,没有 t没经过实战);我们的项目使用MongoDB;由于项目的特殊性,我们研究了很多关于A-gtB的数据同步方案,包括DB2/Mysql到MongoDB,MongoDB到MongoDB等等。

将MySQL数据同步到es的方案将MySQL数据实时同步到ES,可以实现ES中的低延迟检索。有的公司为自己的项目做了子库,可以设置一套es来放所有的数据(或者所有数据的某些字段,达到全检索的效果)。常用的数据同步方案如下:

MySQL Binlog:MySQL Binlog日志可以用于数据库的主从复制和数据恢复,也可以将MySQL数据同步到ES;这里需要注意的是,Binlog的日志模式只能使用行模式(另外两种模式是语句和混合);解析Binlog日志的内容,执行ES文档API,这样数据就可以同步到ES中;

MySQL dump:如果是新建项目,使用Binlog进行数据同步是没有问题的。但是如果MySQL已经运行了一段时间,项目架构中加入了ES,那么历史数据的迁移就需要额外的处理,因为Binlog可能已经被覆盖了。此时可以通过mysqldump导出已有数据,然后使用Binlog来同步历史数据。

开源工具:前两种方法都是数据库日志级别的,我们也可以使用一些开源工具,比如Go-Go-MySQL-elastic search;;它可以帮助我们完成第一次完全数据同步和后续的增量数据同步(底层也是解析Binlog日志);或者mypipe,支持解析Binlog日志的内容并推送到Kafka。如果要把它们写入ES,就需要额外编写代码,从Kafka消费数据,写入ES。

如上所述,我们项目中的实现方案是将关系数据库DB2/Mysql中的数据同步到MongoDB,Mysql仍然可以使用Binlog日志。很难实现DB2想要实时通知发生变化的数据(向DB2服务器写程序时,需要关联数据库,当数据发生变化时,程序会向外围系统发送MQ通知),不考虑性能是否能得到保证,也就是说, "编写一个通知程序,并将其部署到数据库所在的服务器上(侵入式)",这至少在我们公司是不可能的。

我们采用一种很低级的来解决这个问题,即Java程序扫描DB2表中的时间戳,读取最近发生变化的数据,处理到MongoDB中;

虽然实现方案比较低,但是效果还不错,因为在关系型数据到MongoDB的数据同步过程中,我们可以自己做数据处理;相当于按照某个数据维度,比如客户维度,关联了几十个表,处理后在MongoDB中保存一个文档;对外提供服务时,查询效率明显提高,因为提前完成了表关联(接口响应多为毫秒级,即使超过50ms也会很慢)。

缺点也很明显。数据从关系数据库到MongoDB的延迟非常高,我们的项目经过几次优化后需要20分钟左右。所以一定要结合业务场景考虑是否使用这个方案。

我会继续分享我对Java开发、架构设计、程序员职业发展等方面的看法,希望得到大家的关注。

数据 项目 Binlog ES 日志

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。