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.rhkb.cn/news/502393.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣66 加一

class Solution:def plusOne(self, digits: List[int]) -> List[int]:# 从最低位开始加一for i in range(len(digits) - 1, -1, -1):if digits[i] < 9:digits[i] 1return digitsdigits[i] 0# 如果所有位都是9&#xff0c;需要增加一位&#xff0c;例如 999 -> 1000r…

代码段中使用数据、栈

代码段中使用数据 改进之后 代码段中使用栈 在数据段中专门空出一段&#xff0c;作为栈 将数据、代码、栈放入不同段中

OpenCV的TickMeter计时类

OpenCV的TickMeter计时类 1. TickMeter是一个计时的类1.1 计算耗时1.2 计算循环的平均耗时和FPS1.3 function 2. 案例 1. TickMeter是一个计时的类 https://docs.opencv.org/4.x/d9/d6f/classcv_1_1TickMeter.html#details 1.1 计算耗时 TickMeter tm;tm.start();// do some…

Fabric部署-docker安装

一&#xff1a;安装docker 1.先卸载旧docker apt-get remove docker docker-engine docker.io containerd runc PS&#xff1a;新开的虚拟机输入命令后是这样的。 2.更新软件包 在终端中执行以下命令来更新Ubuntu软件包列表和已安装软件的版本: sudo apt update sudo apt …

【CSS】 ---- CSS 实现图片背景清除的滑动效果三种方法

1. 实现效果 1.1 removebg 实现图片背景的去除 1.2 gitee 登录界面的项目协同效果 2. 实现分析 最常见的方法就是通过 JS 定位获取设置对应盒子的宽度&#xff1b;removebg 使用的方法是 clip-path: polygon 来设置图片的显示区域&#xff1b;gitee 使用的方法是 clip: rect …

开源模型迎来颠覆性突破:DeepSeek-V3与Qwen2.5如何重塑AI格局?

不用再纠结选择哪个AI模型了&#xff01;chatTools 一站式提供o1推理模型、GPT4o、Claude和Gemini等多种选择&#xff0c;快来体验吧&#xff01; 在全球人工智能模型快速发展的浪潮中&#xff0c;开源模型正逐渐成为一股不可忽视的力量。近日&#xff0c;DeepSeek-V3和Qwen 2.…

微信开发工具git提交到码云

超简单&#xff0c;适用新手快速实现新项目备份到码云。步骤如下&#xff1a; 1、先在码云创建一个仓库&#xff0c;不要初始化readme文件 2、点击微信开发工具版本管理&#xff0c;如果第一次&#xff0c;会提示初始化仓库&#xff0c;照做就行 3、配置一些git信息 输入你的码…

PHP7和PHP8的最佳实践

php 7 和 php 8 的最佳实践包括&#xff1a;使用类型提示以避免运行时错误&#xff1b;利用命名空间组织代码并避免命名冲突&#xff1b;采用命名参数、联合类型等新特性增强可读性&#xff1b;用错误处理优雅地处理异常&#xff1b;关注性能优化&#xff0c;如避免全局变量和选…

数据分享:空气质量数据--哈尔滨

说明&#xff1a;如需数据可以直接到文章最后关注获取。 1.数据背景 地理位置与气候条件&#xff1a;哈尔滨位于中国东北部&#xff0c;黑龙江省南部&#xff0c;松花江中游。由于其地理位置&#xff0c;冬季寒冷且漫长&#xff0c;夏季短促而温热。这种气候特点对空气质量…

端口镜像SPAN与RSPAN

端口镜像概述 端口镜像的作用主要在于一些难度较大的网络技术的学习中&#xff0c;我们通过抓包对报文的分析&#xff0c;可以更好地理解 还有的就是在网络排障的过程中&#xff0c;我们可以通过抓包分析数据报文的收发等状态&#xff0c;来判断在哪个设备节点上出现了问题 …

基于Web的足球青训俱乐部管理后台系统的设计与开发源码(springboot+mysql+vue)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的基于Web的足球青训俱乐部管理后台系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基…

IDEA 撤销 merge 操作(详解)

作为一个开发者&#xff0c;我们都知道Git是一个非常重要的版本控制工具&#xff0c;尤其是在协作开发的过程中。然而&#xff0c;在使用Git的过程中难免会踩一些坑&#xff0c;今天我来给大家分享一个我曾经遇到的问题&#xff1a;在使用IDEA中进行merge操作后如何撤销错误的合…

用matlab调用realterm一次性发送16进制数

realterm采用PutString接口进行发送&#xff0c;需要注意的是发送的16进制数前面要加入0x标志。只有这样&#xff0c;realterm才能将输入的字符串识别为16进制数的形式。 另外,PutString函数支持两个参数输入&#xff0c;第一个参数为字符串&#xff0c;第二个参数为发送形式&…

C++基础概念复习

前言 本篇文章作基础复习用&#xff0c;主要是在C学习中遇到的概念总结&#xff0c;后续会继续补充。如有不足&#xff0c;请前辈指出&#xff0c;万分感谢。 1、什么是封装&#xff0c;有何优点&#xff0c;在C中如何体现封装这一特性&#xff1f; 封装是面向对象编程&…

【C++】矩阵转置问题详解与优化

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目解析&#x1f4af;第一种实现方式&#xff1a;我的初始做法实现思路优缺点分析 &#x1f4af;第二种实现方式&#xff1a;我的优化做法实现思路优缺点分析 &#x1f4a…

在线二维码生成器-GO在线工具-文本工具

一款高效、便捷的在线二维码生成工具&#xff0c;支持生成文本、链接、名片等多种类型的二维码。无需安装软件&#xff0c;快速在线生成高清二维码&#xff0c;适用于个人使用和商业推广。免费使用&#xff0c;让二维码生成变得更简单。 gotool

【微服务】2、网关

Spring Cloud微服务网关技术介绍 单体项目拆分微服务后的问题 服务地址问题&#xff1a;单体项目端口固定&#xff08;如黑马商城为8080&#xff09;&#xff0c;拆分微服务后端口各异&#xff08;如购物车808、商品8081、支付8086等&#xff09;且可能变化&#xff0c;前端难…

SpringBoot3-深入理解自动配置类的原理(尚硅谷SpringBoot3-雷神)

文章目录 目录了解自动配置 一、导入对应场景的Mean依赖&#xff1a;1、引入依赖**找到自动配置类的所有配置都存放在哪里** 二、编写主程序&#xff1a;SpringBootApplication观察源码时所需要知道的几个核心注解&#xff1a;1、观察SpringBootApplication源码都做了什么 三、…

图像分割基础:使用Python和scikit-image库

大家好&#xff0c;今天我们将一起探讨图像分割的基础知识&#xff0c;并使用Python编程语言以及scikit-image库来实现一个简单的图像分割示例。图像分割是图像处理中的一项重要技术&#xff0c;它允许我们将图像划分为多个部分或对象&#xff0c;这对于图像分析和计算机视觉任…

SpringBoot中实现拦截器和过滤器

【SpringBoot中实现过滤器和拦截器】 1.过滤器和拦截器简述 过滤器Filter和拦截器Interceptor&#xff0c;在功能方面很类似&#xff0c;但在具体实现方面差距还是比较大的。 2.过滤器的配置 2.1 自定义过滤器&#xff0c;实现Filter接口(SpringBoot 3.0 开始&#xff0c;jak…