Mysql数据实时同步到Es上

同步方案

① 同步双写

同步双写实一种数据同步策略,它指的是在主数据库(如mysql) 上进行数据修改操作,同时将这些修改同步写入到ES 中,这种策略旨在确保两个数据库之间的数据一致性,并且优化系统的读写性能。

目标

同步双写是指在进行数据写入操作的时候,同时向两个或者多个数据库写入相同的数据,在mysql 与Ed 的同步场景中,其主要目的是将mysql 的业务数据实时同步到es 中,以便利用ES 的高效查询能力来应对复杂的查询需求,同时减轻mysql的查询压力。

实现方式

直接同步

在业务代码中,每次对mysql 数据库进行写入操作的时候,同时执行对ES的写入操作,这种方式简单直接,但可能增加代码的复杂性和出错的风险。

利用中间件

利用消息队列(如 kafka) 、数据变更捕获工具(如 Debezium) 或者ETL 工具(如Logstash) 等中间件来捕获Mysql 的数据变更事件,并将这些事件转发到ES 进行同步。这种方式可以解耦业务代码与数据同步逻辑,提高系统的可扩展性和可维护性。

触发器与存储过程

在mysql 中设置触发器或者编写存储过程,在数据发生变更的时候自动触发ES的写入操作,这种方式可以减少业务代码的侵入性,但可能会增加Mysql的负担并影响性能。

优缺点

优点:

① 业务逻辑编写简单

② 业务查询实时性高

缺点

① 业务硬编码,有需要写入mysql 的地方都需要添加写入Es 的代码

② 业务代码强耦合度很高

③ 存在双写失败丢数据的风险。

应用场景

同步双写策略适用于对数据一致性要求较高且需要优化查询性能非场景,例如,在电商系统中,可以将商品信息、订单数据等存储在mysql 中,同时将这些数据同步到ES 中用于以支持复杂的搜索和分析需求。

② Logstash 同步

Logstash 是一个开源的服务端数据处理管道,可以同时从多个来源采集数据,转化数据,然后将数据发送到您指定的存储库中,在实现mysql 数据库和Elasticsearch 之间的数据同步是,Logstash 可以发布重要作用

优缺点

优点:

① 不改变原有代码,没有侵入性、没有硬编码。

② 没有业务强耦合,不改变原来程序的性能。

缺点

① 时效性差,由于是采用定时器根据固定频率查询表来同步数据,尽管将同步周期设置到秒级,也还是会存在一定时间的延迟。

② 对数据库有一定的轮询压力,一种改进方法是将轮询放到压力不大的从库上。

③ 无法实现同步删除,需要在Elasticsearch 中执行相关命令手动删除

④ Elasticsearch 中的_id 字段必须与Mysql 中的id 字段相同。

canal 数据同步(最优)

使用canal模拟成Mysql 的slave, 实时接收Mysql 的增量数据binlog, 然后通过Restful API 将数据写入到阿里云ES 实例或者Es Serverless 应用中,适用于对数据同步的实时性要求较高的场景。

同步原理:

canal 原理急救室伪装成Mysql 的从节点,从而订阅master 的节点binlog 日志,通过订阅binlog 方式实现数据实时同步,在不影响源数据库的情况下,同步延迟可降低至毫秒级别。

同步流程

① Canal 服务端向mysql 的master 节点传输dump 协议。

② mysql 的master 节点接收到dump 请求后推送binlog 日志给canal服务端,解析binlog对象(原始为byte 流) 转成json 格式。

③ canal 客户端通过TCP 协议或者MQ 形式监听Canal 服务端,同步数据到ES

相关推荐
Elastic 中国社区官方博客7 分钟前
如何在不同版本的 Elasticsearch 之间以及集群之间迁移数据
大数据·数据库·elasticsearch·搜索引擎·全文检索·logstash
坤小满学Java9 分钟前
【从0到1学Elasticsearch】Elasticsearch从入门到精通(上)
elasticsearch
qq_366086222 小时前
union all几个常见问题及其解决方案
数据库
搞不懂语言的程序员4 小时前
备忘录模式深度解析与实战案例
数据库·python·备忘录模式
手揽回忆怎么睡5 小时前
mongodb学习
数据库·学习·mongodb
LL1681996 小时前
SSM考研助手管理系统
java·服务器·开发语言·数据库·学习
luoluoal7 小时前
Java项目之基于ssm的QQ村旅游网站的设计(源码+文档)
java·mysql·mybatis·ssm·源码
luoluoal8 小时前
Java项目之基于ssm的学校小卖部收银系统(源码+文档)
java·mysql·毕业设计·ssm·源码
veminhe8 小时前
Node.js 数据库 CRUD 项目示例
数据库·node.js
HX科技8 小时前
树莓派_利用Ubuntu搭建gitlab
数据库·ubuntu·gitlab