首页 > 数据库 >Mysql数据同步ES的4种方式

Mysql数据同步ES的4种方式

时间:2024-07-08 10:22:16浏览次数:15  
标签:实时性 同步 写入 MQ Mysql 数据 ES

1、同步双写

 通过应用服务,直接为数据库及ES写如数据。

 优点:

  • 业务逻辑简单;
  • 实时性高

缺点:

  • 业务耦合,耦合大量数据同步代码
  • 硬编码,有需要写入 MySQL 的地方都需要添加写入 ES 的代码;
  • 影响性能,写入两个存储,响应时间变长
  • 不便扩展:搜索可能有一些个性化需求,需要对数据进行聚合,这种方式不便实现
  • 存在双写失败丢数据风险;
  • 性能较差,本来 MySQL 的性能不是很高,再加一个 ES,系统的性能必然会下降。

2、异步双写

优点:

  • 解耦合
  • 不易出现数据丢失问题,主要基于 MQ 消息的消费保障机制;
  • 实时性较好,使用MQ,正常情况下,同步完成在秒级;

缺点:

  • 引入了新的组件和服务,增加了复杂度
  • 硬编码问题
  • MQ是异步消费模型,用户写入的数据不一定可以马上看到,造成延时。

3、数据抽取

优点:

  • 实现比较简单
  • 没有硬编码、无业务耦合

缺点:

  • 实时性难以保证
  • 对存储压力较大

经典方案:借助 Logstash 实现数据同步,其底层实现原理就是根据配置定期使用 SQL 查询新增的数据写入 ES 中,实现数据的增量同步。

4、数据订阅

MySQL通过binlog订阅实现主从同步,各路数据订阅框架比如canal就依据这个原理,将client组件伪装成从库,来实现数据订阅。

优点:

  • 业务入侵较少
  • 实时性较好、无业务耦合

缺点:

  • 构建 Binlog 系统复杂;
  • 如果采用 MQ 消费解析的 Binlog 信息,也会像方案二一样存在 MQ 延时的风险。

至于数据订阅框架的选型,主流的大体上是这些:

 CancalMaxwellPython-Mysql-Rplication
开源方 阿里巴巴 Zendesk 社区
开发语言 Java Java Python
活跃度 活跃 活跃 活跃
高可用 支持 支持 不支持
客户端 Java/Go/PHP/Python/Rust Python
消息落地 Kafka/RocketMQ 等 Kafka/RabbitNQ/Redis 等 自定义
消息格式 自定义 JSON 自定义
文档详略 详细 详细 详细
Boostrap 不支持 支持 不支持

标签:实时性,同步,写入,MQ,Mysql,数据,ES
From: https://www.cnblogs.com/hehanhan/p/18289322

相关文章

  • Es集群架构的搭建以及集群的核心概念
    1、深入理解ES集群架构的底层原理这篇主要讲解es的集群架构的底层原理,es的索引分片,副本等基本知识集群的核心概念在安装集群之前,先了解一下集群的几个概念。如下图,就是一个三个节点组成的es集群,p0、p1、p2表示一个节点中的分片,R0、R1、R2表示分片对应的副本 1.1节点以及......
  • windows mysql执行sql文件
    背景快速导入数据表或者数据库。解决直接执行sql文件。虽然直接复制内容也行,但是还是执行文件更好一些。登录mysql-uroot-p-Dxxx-D指定数据库的名称。如果不写,可以在进入mysql命令行后,使用usexxx来使用数据库。执行sourcexxx.sql特别注意,哪怕路径里有空......
  • Spring Boot3整合Mybatis Plus,数据库为MySQL
    项目结构如下:注意不需要任何XML文件1.导入依赖除了SpringBoot创建时自带的依赖,还需要加入:<!--MybatisPlus依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version&g......
  • what is NamedTupleStore?
    WhatNamedTuplestore按字面意思理解,就是一个有名字的tuplestore,那估计就不是一个正常的表。根据PostgreSQL的官方叫法,NamedTuplestoreScan对应的表称为为EphemeralNamedRelation,中文翻译为短暂的命名关系.When在使用触发器的时候会使用到该特性HowCREATETABLEt......
  • Address Sanitizer
    AddressSanitizerIntroduction​ AddressSanitizer是一款内存检测器,它可以检测在堆栈,全局变量等地方的溢出。后来被整合到了GCC等编译器中,AddressSanitizer由两部分组成:一个Instrumentation模块和一个运行时库。Instrumentation模块修改代码来检查每个内存访问的影子状态,并......
  • R语言数据格式转换:字符串(Strings)转为日期类型(Dates)
     R语言数据格式转换:字符串(Strings)转为日期类型(Dates)目录 R语言数据格式转换:字符串(Strings)转为日期类型(Dates)as.Date函数单个字符串到日期类型字符串向量到日期类型向量dataframe一列从字符串到日期类型dataframe多列从字符串到日期类型 as.Date函数通常,当您......
  • Win11系统提示找不到JSC.Resources.dll文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个JSC.Resources.dll文件(挑选合适的版本文件)......
  • Win11系统提示找不到KBDEST.DLL文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个KBDEST.DLL文件(挑选合适的版本文件)把它放......
  • Win11系统提示找不到KBDES.DLL文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个KBDES.DLL文件(挑选合适的版本文件)把它放入......
  • 从 Helm 到 Operator:Kubernetes应用管理的进化
    ......