当前位置: 首页 > article >正文

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

 


http://www.kler.cn/a/469499.html

相关文章:

  • 改进萤火虫算法之一:离散萤火虫算法(Discrete Firefly Algorithm, DFA)
  • [微服务]redis主从集群搭建与优化
  • 运动相机拍摄的视频打不开怎么办
  • Laravel操作ElasticSearch
  • 自动采集商品信息、处理数据并自动上架到
  • 【vue】晋升路线图、蛇形进度条
  • Harmony tab的使用
  • 2025年大数据、通信技术与计算机应用国际学术会议(BDCTA 2025)
  • GPTs+PRA:教育领域的新引擎,推动个性化与智能化教学
  • 量子机器学习:当量子计算遇上人工智能,颠覆即将来临?
  • Ubuntu20.04版本的ROS环境配置与基本概述
  • 生成式AI与RAG架构:如何选择合适的向量数据库?
  • TLS(传输层安全,Transport Layer Security)是用于在网络上提供通信安全的一种加密协议。
  • 【整理集合大全】MySQL(4) 数据库增删改查SQL语句
  • pytorch 梯度判断函数介绍
  • 【生活】冬天如何选口罩(医用口罩,N95, KN95还是KP95?带不带呼吸阀门?带不带活性炭?)
  • leetcode hot 100 只出现一次的数字
  • uniapp - 基于uniapp+vue3实现自定义增强版table表格组件体验「兼容H5+小程序+App端」
  • DooTask | 使用 DooTask AI 机器人,解锁任务创建新姿势
  • 使用Chrome谷歌浏览器中内置翻译功能
  • DVWA 命令注入写shell记录
  • 算法-excel表头位置转成对应数字 26进制转10进制
  • Vue3的父传子
  • FPGA火焰识别算法
  • 【网络安全 | 漏洞挖掘】硬编码凭据泄露实现支付系统账户接管
  • python3 利用生成器生成元组