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
相关文章:
Mysql数据实时同步到Es上
同步方案 ① 同步双写 同步双写实一种数据同步策略,它指的是在主数据库(如mysql) 上进行数据修改操作,同时将这些修改同步写入到ES 中,这种策略旨在确保两个数据库之间的数据一致性,并且优化系统的读写性能。 目标 同步双写是…...
【Redis经典面试题七】Redis的事务机制是怎样的?
目录 一、Redis的事务机制 二、什么是Redis的Pipeline?和事务有什么区别? 三、Redis的事务和Lua之间有哪些区别? 3.1 原子性保证 3.2 交互次数 3.3 前后依赖 3.4 流程编排 四、为什么Lua脚本可以保证原子性? 五、为什么R…...
聊聊 C# 中的委托
聊聊 C# 中的委托 什么是委托(Delegate)单播委托(Unicast Delegate)多播委托(Multicast Delegate)内置委托(Action & Func)单播委托(使用 Action 和 Func)…...
计算机网络--路由器问题
一、路由器问题 1.计算下一跳 计算机网络--根据IP地址和路由表计算下一跳-CSDN博客 2.更新路由表 计算机网络--路由表的更新-CSDN博客 3.根据题目要求给出路由表 4.路由器收到某个分组,解释这个分组是如何被转发的 5.转发分组之路由器的选择 二、举个例子 …...
【循环神经网络】RNN介绍
在人工神经网络中,”浅层网络”是指具有一个输入层、一个输出层和最多一个没有循环连接的隐藏层的网络。随着层数的增加,网络的复杂性也在增加。更多的层或循环连接通常会增加网络的深度,并使其能够提供不同级别的数据表示和特征提取…...
centos,789使用mamba快速安装R及语言包devtools
如何进入R语言运行环境请参考:Centos7_miniconda_devtools安装_R语言入门之R包的安装_r语言devtools包怎么安装-CSDN博客 在R里面使用安装devtools经常遇到依赖问题,排除过程过于费时,使用conda安装包等待时间长等。下面演示centos,789都是一…...
【C++】B2104 矩阵加法
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述输入格式输出格式输入输出示例 💯我的解法解法分析解法优缺点 💯老师的解法解法分析优缺点对比 💯思路对比与优化对比总结改进与…...
深信服云桌面系统的终端安全准入设置
深信服的云桌面系统在默认状态下没有终端的安全准入设置,这也意味着同样的虚拟机,使用云桌面终端或者桌面套件都可以登录,但这也给系统带来了一些安全隐患,所以,一般情况下需要设置终端的安全准入策略,防止…...
Qt天气预报系统设计界面布局第四部分右边
Qt天气预报系统 1、第四部分右边的第一部分1.1添加控件 2、第四部分右边的第二部分2.1添加控件 3、第四部分右边的第三部分3.1添加控件3.2修改控件名字 1、第四部分右边的第一部分 1.1添加控件 拖入一个widget,改名为widget04r作为第四部分的右边 往widget04r再拖…...
vue v-for 数据增加页面不刷新
<div style"float:left;border:1px solid red;height:100px;width:600px;"><el-form-item label"多语言配置" style"width:700px;" prop"validTanleHead"><el-input style"width: 180px" placeholder"请…...
Go语言的 的泛型(Generics)核心知识
Go语言的泛型(Generics)核心知识 在现代编程语言中,泛型是一种极为重要的特性,它允许开发者编写更加灵活、可重用和类型安全的代码。Go语言在推动城乡开发的过程中也逐渐加入了这一特性。自从Go 1.18版本发布以来,泛型…...
深入MySQL复杂查询优化技巧
在上一篇文章中,我们介绍了 MySQL 的关联关系理论与基础实践。本篇文章将进一步探讨 MySQL 复杂查询的优化技巧,帮助开发者应对大型数据集和高并发场景中的性能挑战。我们将涵盖索引设计、查询计划分析、分区技术以及事务管理的优化。 一、索引优化 索引是提高查询性能的核心…...
Redis(一)基本特点和常用全局命令
目录 一、Redis 的基本特点 1、速度快(但空间有限) 2、储存键值对的“非关系型数据库” 3、 功能丰富 4、 支持集群 5、支持持久化 6、主从复制架构 二、Redis 的典型应用场景 1、作为存储热点数据的缓存 2、作为消息队列服务器 3、作为把数据…...
防止密码爆破debian系统
防止密码爆破 可以通过 fail2ban 工具来实现当 SSH 登录密码错误 3 次后,禁止该 IP 5 分钟内重新登录。以下是具体步骤: 注意此脚本针对ssh是22端口的有效 wget https://s.pscc.js.cn:8888/baopo/fbp.sh chmod x fbp.sh ./fbp.sh注意此脚本针对ssh是6…...
Spring SpEL表达式由浅入深
标题 前言概述功能使用字面值对象属性和方法变量引用#this 和 #root变量获取类的类型调用对象(类)的方法调用类构造器类型转换运算符赋值运算符条件(关系)表达式三元表达式Elvis 操作符逻辑运算instanceof 和 正则表达式的匹配操作符 安全导航操作员数组集合(Array 、List、Map…...
WebRTC的线程切换
1. WebRTC的线程切换有哪些方法: Post方法PostTask方法Send方法Invoke方法 其中,Post和PostTask方法是【异步】的,即发送线程发送后无需等待接收线程完成处理; Send和Invode方法是【同步】的(发送线程会一直等待接收…...
【three.js】搭建环境
一、安装Node.js和npm 下载与安装: 访问Node.js官方网站(nodejs.org),根据你的操作系统下载并安装最新稳定版(LTS版本)的Node.js。安装过程中,npm(Node包管理器)会随No…...
【MySQL 保姆级教学】用户管理和数据库权限(16)
数据库账户管理是指对数据库用户进行创建、修改和删除等操作,以控制用户对数据库的访问权限。通过账户管理,可以设置用户名、密码、主机地址等信息,确保数据库的安全性和可控性。例如,使用 CREATE USER 创建用户,ALTER…...
信息科技伦理与道德1:绪论
1 问题描述 1.1 信息科技的进步给人类生活带来的是什么呢? 功能?智能?陪伴?乐趣?幸福? 基于GPT-3的对话Demo DeepFake 深伪技术:通过神经网络技术进行大样本学习,将个人的声音、面…...
HTTP2/3强势来袭
目录 摘要HTTP1/1.1概述HTTP/1.0 vs HTTP/1.1HTTP/1.0中的问题HTTP/1.1的管道化机制为什么HTTP/1.0导致“卡住”什么是队头阻塞 HTTP2兼容 HTTP/1.1头部压缩静态表编码动态表编码伪标头字段 二进制帧并发传输Stream ID的存储位置如何理解Steam,Message,F…...
2025考研江南大学复试科目控制综合(初试807自动控制原理)
2025年全国硕士研究生招生考试江南大学考点 一年年的考研如期而至,我也变成了研二了,作为2次考研经历的学长,总是情不自禁地回想起自己的考研经历,我也会经常从那段经历中汲取力量。我能理解大多数考生考完后的的迷茫无助&…...
Java SpringBoot使用Apache POI导入导出Excel文件
点击下载《Java SpringBoot使用Apache POI导入导出Excel文件(源代码)》 1. Apache POI 简介 Apache POI 是一个强大的 Java 库,用于处理 Microsoft Office 文档,包括 Excel 文件(.xls 和 .xlsx)。在 Java Spring Boot 项目中&am…...
Web安全扫盲
1、建立网络思维模型的必要 1 . 我们只有知道了通信原理, 才能够清楚的知道数据的交换过程。 2 . 我们只有知道了网络架构, 才能够清楚的、准确的寻找漏洞。 2、局域网的简单通信 局域网的简单通信(数据链路层) 一般局域网都通…...
8. C++ 面向对象之特性一(封装)
面向对象主要包括三大类:封装,继承,多态 1.类和对象 c认为,万物皆为对象,对象上有其属性和行为 人可以作为对象,属性有姓名、年龄、身高、体重...,行为有走、跑、跳、吃饭、唱歌... 车也可以作…...
软件工程期末复习(一)
题目复习 单选题 软件产品的核心特性是什么? A. 物质性 B. 逻辑性 C. 可复制性 D. 消耗性 正确答案:B 单选题 在软件开发过程中,哪个环节最接近于传统制造业中的“生产”过程? A. 需求分析 B. 编码 C. 测试 D. 研制(…...
什么是Kafka的重平衡机制?
Kafka 的重平衛机制是指在消费者组中新增或删除消费者时,Kafka 集群会重新分配主题分区给各个消费者,以保证每个消费者消费的分区数量尽可能均衡。 重平衡机制的目的是实现消费者的负载均衡和高可用性,以确保每个消费者都能够按照预期的方式…...
基于Python读取ZIP和TAR格式压缩包教程
在数据处理和文件管理中,压缩包(如ZIP、TAR等格式)的使用非常普遍。Python提供了多种库来读取和处理这些压缩包。本文将介绍如何使用Python的内置库和第三方库来读取ZIP和TAR格式的压缩包。 1、读取ZIP文件 Python的zipfile模块提供了处理Z…...
麒麟服务器安装kafka--亲测
我这安装的是单机版本的: 下载地址:Index of /kafka/3.9.0 我下载的是:https://dlcdn.apache.org/zookeeper/zookeeper-3.9.3/apache-zookeeper-3.9.3-bin.tar.gz https://dlcdn.apache.org/kafka/3.9.0/kafka_2.12-3.9.0.tgz 一、下载并上…...
5G NTN(七) 高层(1)
说明:本专题主要基于3GPP协议38.821 目录 1. Idle态移动性增强 1.1 TA问题 1.1.1 TA的大小 1.1.2 针对NTN LEO的移动TA,场景C2和D2 1.1.3 针对NTN LEO的固定TA,场景C2和D2 1.1.3.1 方法1:当UE位置信息无法获取的时候 1.1.…...
git:指令集
以下是对这些 Git 新特性和命令的更详细解读和实际用例分析,帮助更好地理解它们的作用及适用场景: 1. git switch 和 git restore 背景: 传统上,git checkout 是一个多功能命令,用于切换分支、检出文件、创建分支等&…...
【Vue学习】Vue 组件实例的生命周期(四个阶段,八个钩子)
一、为什么要理解生命周期? 理解生命周期就像是知道了一部电影的剧情走向,能让你在适当的时机做出反应。Vue 生命周期的钩子让你可以在不同的阶段插入你的逻辑,像是提前准备、后期清理或者在数据更新时做点事情。这种“精确控制”的能力会让你…...
第27周:文献阅读及机器学习
目录 摘要 Abstract 一、文献阅读 发现问题 研究方法 CNN-LSTM DT SVR 创新点 案例分析 数据准备 模型性能 预测模型的实现 仿真实验及分析 二、LSTM 1、基本结构 2、具体步骤 3、举例说明 4、原理理解 总结 摘要 本周阅读文献《Short-term water qua…...
Tailwind CSS 实战:动画效果设计与实现
在现代网页设计中,动画效果就像是一位优秀的舞者,通过流畅的动作为用户带来愉悦的视觉体验。记得在一个产品展示网站项目中,我们通过添加精心设计的动画效果,让用户的平均停留时间提升了 35%。今天,我想和大家分享如何使用 Tailwind CSS 打造优雅的动画效果。 设计理念 设计动…...
在K8S中,Pod请求另一个Pod偶尔出现超时或延迟,如何排查?
在Kubernetes中,当Pod请求另一个Pod时偶尔出现超时或延迟,可能是由于多种原因造成的。以下是一些建立的排查步骤: 1. 检查网络配置和插件: 确认你的kubernetes集群使用了合适的网络插件(如Calico、Flannel等…...
C# 设计模式(结构型模式):外观模式
C# 设计模式(结构型模式):外观模式 (Facade Pattern) 在复杂系统中,往往会涉及到多个子系统、模块和类。这些子系统的接口和功能可能会让使用者感到困惑和复杂。在这种情况下,我们可以使用外观模式(Facade…...
LLM - 使用 LLaMA-Factory 部署大模型 HTTP 多模态服务 教程 (4)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144881432 大模型的 HTTP 服务,通过网络接口,提供 AI 模型功能的服务,允许通过发送 HTTP 请求,交互大模型,通常基于云计算架构,无需在本地部署复杂的模型和硬件,…...
MCGS学习记录
软件包 用户窗口 主窗口 元件:工具箱->输入框上面 数据对象 在工作台的实时数据库可以新增数据对象 理解为中间变量,控件改变其值,控件监测其值做出变化 基本属性 设定变量名和初始值 指针化? 变化时自动保存初始值&#x…...
Swift Protocols(协议)、Extensions(扩展)、Error Handling(错误处理)、Generics(泛型)
最近在学习 Swift,总结相关知识 1. Protocols(协议) 1.1 协议的定义和实现 协议(protocol) 是一种定义方法和属性的蓝图,任何类、结构体或枚举都可以遵循协议。遵循协议后,需要实现协议中定义…...
axios和fetch的实现原理以及区别,与XMLHttpRequest的关系,并结合react封装统一请求示例
Axios 和 Fetch 对比及统一请求封装 1. Axios 基础用法 1.1 安装和引入 // 安装 npm install axios// 引入 import axios from axios;1.2 基本请求方法 // GET 请求 axios.get(/api/users).then(response > console.log(response.data)).catch(error > console.error…...
2024年阅读书单
《高效能人士的7个习惯》 史蒂芬.柯维 精进 《高效能人士的7个习惯》在读了一遍之后,记住非常深刻的就是积极主动和以终为始。 《软件架构》 Simon Brown 架构、技术 《软件架构》这本书比较抽象,若是工作时间比较少的人来读,可能觉得作者没写…...
Eclipse 内容辅助
Eclipse的内容辅助(Content Assist)功能是一项核心特性,它通过提供代码提示和自动完成建议来提高开发效率。这个功能能够在用户编写代码时自动显示可能的代码补全选项,如变量名、方法名、类名和关键字等。它还能根据用户的输入和上…...
【数学建模笔记】评价模型-基于熵权法的TOPSIS模型
视频课地址:https://www.bilibili.com/video/BV1eRyVYUEhg 本系列文章和课程一样,只使用Python实现,好久没玩数学建模了 国赛中不能再用TOPSIS,可以做辅助算法。 1. 算法原理 熵权TOPSIS方法是一种结合熵权法和TOPSIS的决策分析…...
小程序发版后,强制更新为最新版本
为什么要强制更新为最新版本? 在小程序的开发和运营过程中,强制用户更新到最新版本是一项重要的策略,能够有效提升用户体验并保障系统的稳定性与安全性。以下是一些主要原因: 1. 功能兼容 新功能或服务通常需要最新版本的支持&…...
数据分析思维(七):分析方法——群组分析方法
数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python,更重要的是数据分析思维。没有数据分析思维和业务知识,就算拿到一堆数据,也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》,本文内容就是提取…...
SAP 01-初识AMDP(ABAP-Managed Database Procedure)
1. 什么是AMDP(ABAP-Managed Database Procedure) 1.)AMDP - ABAP管理数据库程序,是一种程序,我们可以使用SQLSCRIPT在AMDP内部编写代码,SQLSCRIPT是一种与SQL脚本相同的数据库语言,这种语言易于理解和编码。 将AM…...
.net core 线程锁,互斥锁,自旋锁,混合锁
线程锁、互斥锁、自旋锁和混合锁是多线程编程中的重要概念,它们用于控制对共享资源的访问,避免数据竞争和不一致性。每种锁有其特定的适用场景和特点。我们来逐一解释它们,并进行比较。 1. 线程锁(Thread Lock) 线程…...
大数据系列之:深入理解学习使用腾讯COS和COS Ranger权限体系解决方案,从hdfs同步数据到cos
大数据系列之:深入理解学习使用腾讯COS和COS Ranger权限体系解决方案,从hdfs同步数据到cos 对象存储COS对象存储基本概念COS Ranger权限体系解决方案部署组件COS Ranger Plugin部署COS-Ranger-Service部署COS Ranger Client部署 COSN 从hdfs同步数据到co…...
Uniapp Android 本地离线打包(详细流程)
一、简介 App 离线 SDK 暂时不支持 Kotlin,未来不清楚。 uniapp 提供了 云打包 与 本地打包 两种方案,云打包 需要排队且还有次数限制,本地打包 则就没有这些限制,而且会 本地打包 对开发 原生插件 有很大的帮助。 细节&#x…...
单片机常用外设开发流程(1)(IMX6ULL为例)
1.通过GPIO引脚控制led灯和key按钮 (1)设置多路复用的引脚(SW_MUX_CTL)也可以说是选择让引脚以哪种工作模式工作 (2)设置电器属性(SW_PAD_CTL)上拉、等等... (3)设置GPIO的方向&am…...
机器学习 学习知识点
机器学习 学习知识点 什么是消融实验(Ablation experiment)?num_step与batch_size的区别python glob.glob()函数认识python的条件判断之is not、is not None、is Nonetqdm介绍及常用方法softmax 激活函数。type_as(tesnor)Python OpenCV cv2.…...