【java面经速记】Mysql和ES数据同步

news2024/12/27 1:06:13

目录

Mysql业务数据库

ES查询数据库

数据同步方案

同步双写

异步双写(MQ方式)

基于Mysql的定时扫描同步

基于Binlog实时同步

使用canal监听binlog同步数据到es(流行方案)

拓展:mysql的主从复制原理

canal原理:

数据迁移同步工具

Mysql业务数据库

核心特点:开源免费、高并发、稳定、支持事务、支持SQL查询

高并发:链接轻量化(线程模式),优化器、执行器、事务引擎相对简单粗暴,存储引擎做得比较细致

一般用作上游数据源

ES查询数据库

核心特点:支持分词检索,多维筛选性能好,支持海量数据查询

文本搜索:基于倒排索引实现的搜索系统,文本模糊匹配搜索表现较好

多维筛选:亿级规模数据使用宽表预构建(消除join),配合全字段索引,是的ES在多维筛选上具有压倒性优势

数据同步方案

同步双写

最简单的方式,将数据写到mysql时,同时写到es中

优点:逻辑简单,实时性高

缺点:

  • 有mysql的地方都需要添加es的代码
  • 业务强耦合
  • 存在双写失败丢失数据的风险(ES系统不可用,程序和ES之间的网络故障,系统重启来不及写入ES)
  • mysql性能本身低,加个es,--
异步双写(MQ方式)

适用于多数据源写入的场景,各个源之间写入逻辑互不干扰

优点:

  • 性能高(相比同步双写)
  • 不易出现数据丢失:MQ消息的保障机制,当ES宕机或写入失败,还能重新雄安飞MQ消息
  • 隔离:多数据源之间相互隔离,能写入更多

缺点:

  • 不适合实时业务场景,有延时(异步消费模型,写入的数据不一定能马上看到)
  • 硬编码:接入新数据源需要编写新的代码
  • 复杂度增加:引入了消息中间件
基于Mysql的定时扫描同步

解决了上面2种的硬编码问题(不用ES或者MQ代码)

实时性要求不高:定时器处理

  • 数据库:m字段,任何curd操作都会导致该时间发生变化
  • 原来程序的CURD操作不做任何变化
  • 定时器程序,一定时间周期扫描指定表,该时间段内变化的数据提取出来
  • 逐条写入到ES中

典型实现:

基于logstash实现数据同步,原理:定期使用sql查询新增的数据写入ES中,实现数据的增量同步。

优点:上面的+worker代码编写简单不需要考虑增删查改

缺点:

  • 时效性差,固定频率刷新,就算秒级也是延时
  • 对数据库有轮询压力,可以放到从库中
基于Binlog实时同步

解决上面的硬编码+代码侵入+延迟问题

binlog:binary log

步骤:

  • 读取mysql的binlog日志,获取指定表的日志信息
  • 将读取信息转为MQ
  • 编写一个MQ消费程序
  • 不断更新MQ,每消费一条消息,写入到ES中

优点:

  • 解决上面3个问题
  • 性能高
  • 业务解耦

缺点:

构建Binlog系统复杂

如果采用MQ消费解析的binlog消息,一样存在MQ延时的风险。

使用canal监听binlog同步数据到es(流行方案)

canal : 根据mysql的binlog日志进行增量同步数据

拓展:mysql的主从复制原理
  • 所有create update delete操作都会进入mysql master节点
  • master节点会生成Binlog文件,每次操作Mysql都会记录到Binlog文件中
  • slave节点会订阅master节点的binlog文件,以增量备份的形式同步数据到slave数据
canal原理:

伪装成mysql的从节点,订阅master节点的binlog日志:

  • canal服务端向mysql的master节点传输dump协议
  • mysql的master节点接受到dump请求后推送binog日志给canal服务端,解析binlog对象(原始weibyte流)转成Json格式
  • canal客户端通过TCP协议或者MQ形式监听canal服务端,同步数据到ES

数据迁移同步工具

参考:【技术选型】Mysql和ES数据同步方案汇总-腾讯云开发者社区-腾讯云 (tencent.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2156186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Via浏览器自动关闭CSDN弹窗

不知道大家有没有突发灵感迫切需要在手机上搜索一些技术性博客的时候。 不知道大家是不是搜索到的基本都是CSDN的文章。 不知道大家是否也被CSDN各种弹窗确认搞得心态爆炸。 不知道大家现在在手机上用的是什么浏览器,一直以来,我用的都是夸克&#xf…

时钟的配置

在使用51单片机时,系统使用的时钟源是一个外部晶体振荡器,频率为12M。由于51单片机每个指令周期都是12分频的,所以实际工作频率仅为1M。2440作为一种性能远高于51的Soc,主频肯定要远远高于51,因此2440有着比51单片机复…

【Android】DataBinding的运用

引言 之前对databinding有了基础的运用与介绍,但databinding的用处不单单在于Text的绑定,接下来就一起看看吧! 意义:让布局文件承担了部分原本属于页面的工作,使页面与布局耦合度进一步降低。允许用户界面&#xff0…

Maven-一、分模块开发

Maven进阶 文章目录 Maven进阶前言创建新模块向新模块装入内容使用新模块把模块部署到本地仓库补充总结 前言 分模块开发可以把一个完整项目中的不同功能分为不同模块管理,然后模块间可以相互调用,该篇以一个SSM项目为目标展示如何使用maven分模块管理。…

操作系统之I/O设备管理

I/O系统的组成 I/O系统的结构 微机I/O系统 总线型I/O系统结构,CPU与内存之间可以直接进行信息交换,但是不能与设备直接进行信息交换,必须经过设备控制器。 主机I/O系统 I/O系统可能采用四级结构,包括主机、通道、控制器和设备。一个通道…

神经网络面试题目

1. 批规范化(Batch Normalization)的好处都有啥?、 A. 让每一层的输入的范围都大致固定 B. 它将权重的归一化平均值和标准差 C. 它是一种非常有效的反向传播(BP)方法 D. 这些均不是 正确答案是:A 解析: ‌‌‌‌  batch normalization 就…

TikTokDownloader 开源项目操作教程

TikTokDownloader TikTokDownloader 是一个开源的多功能视频下载工具,它专门用于从抖音和TikTok平台下载无水印的视频、图集和直播内容。这个工具支持批量下载账号作品、收藏内容,并可以采集详细数据。它提供了命令行和Web界面,具有多线程下…

图像处理基础知识点简记

简单记录一下图像处理的基础知识点 一、取样 1、释义 图像的取样就是图像在空间上的离散化处理,即使空间上连续变化的图像离散化, 决定了图像的空间分辨率。 2、过程 简单描述一下图象取样的基本过程,首先用一个网格把待处理的图像覆盖,然后把每一小格上模拟图像的各个…

re题(38)BUUCTF-[FlareOn6]Overlong

BUUCTF在线评测 (buuoj.cn) 运行一下.exe文件 查壳是32位的文件,放到ida反汇编 对unk_402008前28位进行一个操作,我们看到运行.exe文件的窗口正好是28个字符,而unk_402008中不止28个数据,所以猜测MessageBoxA(&#x…

十一、 JDK17 新特性梳理

文章目录 为什么是JDK17语法层面新特性1、文本块2 、Switch 表达式增强3、instanceof的模式匹配4、var 局部变量推导 模块化及类封装1、记录类 record2 、隐藏类 Hidden Classes3 、密封类 Sealed Classes4、模块化 Module System1 、什么是模块化2、声明一个module3 、require…

从零开始讲DDR(4)——Xilinx方案

本文依据的是xilinx的PG150文档,主要介绍的是xilinx的ultrascale系列中内存资源的使用。 一、方案概述 Xilinx UltraScale™架构中的DDR3/DDR4 SDRAM ip核旨在支持高性能的内存接口解决方案。这些ip可以用于将DDR3和DDR4 SDRAM内存类型集成到设计中,提供…

干货 | 2024数智新时代制造业数字化创新实践白皮书(免费下载)

导读:本白皮书将对制造业发展历程、现状、趋势与核心难题做深入解读,并在此基础上提出了相应的制造行业解决方案,结合业内实践成功的客户案例来详析信息化转型的有效方法,以供生产制造行业的从业者参考交流。

计算机毕业设计 基于SpringBoot框架的网上蛋糕销售系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

解决SVN蓝色问号的问题

桌面或文件夹右键,选择TortoiseSVN->Settings打开设置对话框,选择Icon Overlays->Overlay Handlers->取消钩选Unversioned。确定,重启系统即可

扫码挪车是怎么实现的呢?一篇文章带你了解一下!扫码挪车小程序基础版上线了!!!

挪车小程序系统源码的功能特点 快速定位与挪车请求:车主通过小程序可以快速定位车辆位置,并发送挪车请求。系统会自动将请求发送给附近的车主,提醒其尽快挪车。实时通信与交互:小程序支持实时通信功能,车主之间可以通…

【安当产品应用案例100集】017-助力软件服务商高效集成多因素认证

一、企业案例背景 在本案例中,某企业作为一家软件技术服务商,为包括银行、政府机构在内的多个行业提供定制化的软件服务。由于各个行业的安全需求各异,例如银行和政府机构倾向于使用UKEY进行身份验证,而其他企业则可能偏好使用数…

[Python学习日记-26] Python 中的文件操作

[Python学习日记-26] Python 中的文件操作 简介 操作模式 循环文件 其他功能 混合模式 修改文件 简介 在 Python 中的文件操作其实和我们平时使用的 Word 的操作是比较类似的,我们先说一下 Word 的操作流程,流程如下: 找到文件&#x…

Leetcode Hot 100刷题记录 -Day19(回文链表)

回文链表 问题描述: 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true示例 2&#xff…

UnLua访问C++属性、动态生成Actor

一、访问C属性、动态生成Actor 1、在C类MyBaseActor中新增蓝图可编辑属性:Name public:UPROPERTY(EditAnywhere)FString Name;2、在继承自C的蓝图子类BP_BaseActor中给Name赋值 3、在Lua中实现点击按钮动态生成Actor,并访问其Name属性 function WBP_FirstLua_C:Construct()s…

FreeRTOS下UART的封装

FreeRTOS下UART的封装_哔哩哔哩_bilibili Git使用的一个BUG: 当出现这个问题是因为git本身的安全证书路径有问题,我们需要重新指定路径 P1:UART程序层次