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

ops/2024/10/9 17:26:37/

目录

Mysql业务数据库

ES查询数据库

数据同步方案

同步双写

异步双写(MQ方式)

基于Mysql的定时扫描同步

基于Binlog实时同步

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

拓展:sql>mysql的主从复制原理

canal原理:

数据迁移同步工具

Mysql业务数据库

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

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

一般用作上游数据源

ES查询数据库

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

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

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

数据同步方案

同步双写

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

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

缺点:

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

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

优点:

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

缺点:

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

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

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

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

典型实现:

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

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

缺点:

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

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

binlog:binary log

步骤:

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

优点:

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

缺点:

构建Binlog系统复杂

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

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

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

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

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

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

数据迁移同步工具

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


http://www.ppmy.cn/ops/117844.html

相关文章

【ADC】SAR 型 ADC 和 ΔΣ ADC 的选型决策方法

本文学习于TI 高精度实验室课程,介绍如何选择 SAR 或 delta-sigma 型 ADC。 文章目录 一、选型决策树二、特定传感器的应用三、需要 DC 精度但分辨率较低的应用四、需要 DC 精度且分辨率较高的应用五、极低噪声的 DC 精密测量六、需要捕获瞬态信号值的应用七、需要高…

MySQL是怎么处理死锁的?

文章目录 检测死锁选择事务回滚客户端重试 在MySQL中,死锁是指两个或多个事务相互等待对方持有的资源,从而导致这些事务无法继续执行。 MySQL通过以下流程来处理死锁: 检测死锁 MySQL的存储引擎(例如InnoDB)会在事务…

C#和数据库高级:虚方法

文章目录 一、抽象方法和抽象类中的思考1.1、回顾抽象方法的特点1.2、针对抽象方法问题的引出 二、虚方法的使用步骤2.1、虚方法重写方法的调用2.2、系统自带的虚方法2.3、重写Equals方法2.4、虚方法和抽象方法的比较 三、虚方法和抽象方法的联系3.1、ToString()方法的应用 一、…

鸿蒙-app进入最近任务列表触发的监听

如果在UIAbility中,参考第一个链接,在页面中参考如下:State windowStage: window.WindowStage (getContext(this) as common.UIAbilityContext).windowStagetry {this.windowStage.on(windowStageEvent, (data) > {// 前台应用进入最近任…

HalconDotNet实现OCR详解

文章目录 一、基于字符分割的 OCR二、基于模板匹配的 OCR三、基于深度学习的 OCR四、基于特征提取的 OCR五、基于区域建议的 OCR 一、基于字符分割的 OCR 字符分割是 OCR 中的一个重要步骤。首先,对包含文本的图像进行预处理,如去噪、二值化等操作&#…

AI电销机器人是当代电销企业的新宠,智能机器人部署

人类历史发展的过程,就是“人”逐步解放的过程。在今天,“人”的价值比以往任何时期都显得更为重要,人工智能成为核心焦点,而电话机器人在解放“人”的作用上则发挥着至关重要的作用。 自从AI电销机器人走进了电销岗位&#xff0…

基于单片机控制的程控开关电源研究

摘 要 : 在开关电源控制方案中 , 建立于单片机控制基础方式上的程控开关电源方案是一种比较有效的方式 。 利用单片机实现对程控开关的控制, 可以减少设计复杂度 、 增加控制可靠性 , 值得投入更多的精力进行研究和推进 。 本文就这一控制方法进行了详细的探讨 。 关键词…

Snap 发布新一代 AR 眼镜,有什么特别之处?

Snap 发布新一代 AR 眼镜,有什么特别之处? Snap 简介 新一代的 AR 眼镜特点 Snap 简介 Snap 公司成立于 2010 年,2017 年美国东部时间 3 月 2 日上午 11 时许,在纽交所正式挂牌交易,股票代码为 “SNAP”。其旗下的核…