MySQL与ES数据实时同步,双写一致

news2024/11/15 11:36:04

一、简介

        在项目的开发与运维过程中,MySQL 是业务数据库的核心角色,以其强大的事务处理能力和数据完整性保障,支撑着系统的稳定运行。随着数据量的急剧增长和查询复杂度的不断提升,单一依赖 MySQL 进行高效的数据检索显得日益吃力,尤其是在面对海量数据的复杂查询场景时,性能显而易见的降低。

        为了有效缓解这一问题,通常采用读写分离的策略,将 Elasticsearch(简称 ES)引入作为专门的查询数据库。ES 以其卓越的搜索性能、灵活的数据模式以及强大的可扩展性,成为处理复杂查询需求的理想选择。

        确保 MySQL 数据库与 ES 之间的数据同步。数据同步不仅关乎数据的实时性和准确性,更是保障系统稳定性和用户体验的基本。因此,需要精心设计与实施一套高效、可靠的数据同步方案。

        数据同步的实现方式多种多样,包括 Logstash、Kafka Connec等工具进行实时数据捕获与传输,或通过定时任务(如 Cron Job)结合 SQL 查询与批量导入的方式实现数据的定期同步。

二、方案

1. 同步

        同步双写是指在进行数据写入操作时,同时向两个或多个数据库写入相同的数据。在MySQL与ES的同步场景中,其主要目的是将MySQL中的业务数据实时同步到ES中,利用ES的高效查询能力来应对复杂的查询需求,同时减轻MySQL的查询压力。

实现方式:

直接同步:

        每次对MySQL数据库进行写入操作时,同时执行对ES的写入操作。这种方式简单直接,但可能增加代码的复杂性和出错的风险。

使用中间件:

        利用消息队列(如Kafka)、数据变更捕获工具(如Debezium)或ETL工具(如Logstash)等中间件来捕获MySQL的数据变更事件,并将这些事件转发到ES进行同步。这种方式可以解耦业务代码与数据同步逻辑,提高系统的可扩展性和可维护性。

触发器与存储过程:

        在MySQL中设置触发器或编写存储过程,在数据发生变更时自动触发ES的写入操作。这种方式可以减少业务代码的侵入性,但可能会增加MySQL的负担并影响性能。

优缺点分析:

        优点:逻辑编写简单;查询实时性高;

        缺点:硬编码多,只要需要插入数据时就要同步到ES;高耦合;存在数据丢失;系统性能降低;

应用场景:

        同步双写策略适用于对数据一致性要求较高且需要优化查询性能的场景。例如,在电商系统中,可以将商品信息、订单数据等存储在MySQL中,同时将这些数据同步到ES中以支持复杂的搜索和分析需求。

2. 异步

        异步双写允许在主数据库(如MySQL)进行数据修改操作时,异步地将这些修改写入到多个数据源(如ES)中。与同步双写相比,异步双写具有降低主数据库写入延迟、提高系统性能以及避免因备库问题而影响主库性能等优点。

优缺点分析:

        优点:

                高可用:即使备库出现问题,也不会影响主库的正常运行和数据写入;

                提升性能:由于不需要等待备库确认,主库可以更快地完成写入操作,从而提高系统的整体性能;

                隔离性:多源写入之间相互隔离,便于扩展更多的数据源写入;

        缺点:

                系统复杂度增加:需要额外引入了消息中间件;

                实时性较低:由于MQ是异步消费模型,用户写入的数据不一定可以马上看到,消息挤压等会造成延时;

                数据一致性风险:由于存在异步处理的时间差,可能会出现主库和备库之间数据暂时不一致的情况。因此,需要采取适当的措施来确保数据的最终一致性。

应用场景:

        异步双写适用于对数据一致性要求不是特别高但对系统性能要求较高的场景。例如,在电商平台中,可以将用户订单信息、商品库存等关键数据实时同步到主数据库中,同时将一些非关键数据(如用户浏览记录、商品点击量等)异步地同步到备数据库中用于数据分析。这样可以在保证关键数据一致性的同时提高系统的整体性能。

3.logstash同步

        Logstash 是一个开源的服务器端数据处理管道,可以同时从多个来源采集数据,转换数据,然后将数据发送到您指定的存储库中。在实现 MySQL 数据库和 Elasticsearch 之间的数据同步时,Logstash 可以发挥重要作用。

优缺点分析:

        优点:不改变原代码,没有侵入性、没有硬编码;低耦合;

        缺点:时效性较差,由于是采用定时器根据固定频率查询表来同步数据,尽管将同步周期设置到秒级,也还是会存在一定时间的延迟;对数据库有一定的轮询压力,一种改进方法是将轮询放到压力不大的从库上;无法实现同步删除,需要在Elasticsearch中执行相关命令手动删除;Elasticsearch中的_id字段必须与MySQL中的id字段相同;

4.阿里云DTS

        数据传输服务DTS(Data Transmission Service)是阿里云提供的实时数据流服务,支持关系型数据库(RDBMS)、非关系型的数据库(NoSQL)、数据多维分析(OLAP)等数据源间的数据交互,集数据同步、迁移、订阅、集成、加工于一体,助您构建安全、可扩展、高可用的数据架构。

        相对于传统数据迁移或同步工具,DTS为您提供功能更丰富、传输性能更强、易用性更高且安全可靠的服务,帮助您简化复杂的数据交互工作,专注于上层的业务开发。

特性

系统高可用数据传输服务内部每个模块都有主备架构,保证系统高可用。容灾系统实时检测每个节点的健康状况,一旦发现某个节点异常,会将链路快速切换到其他节点。

数据源地址动态适配对于数据订阅及同步链路,容灾系统还会监测数据源的连接地址切换等变更操作,一旦发现数据源发生连接地址变更,它会动态适配数据源新的连接方式,在数据源变更的情况下,保证链路的稳定性。

        DTS可以在两个数据源之间同步正在进行的数据变更。数据同步通常用于OLTP到OLAP的数据传输。数据同步包括以下两个阶段:

        同步初始化:DTS先开始收集增量数据,然后将源数据库的结构和存量数据加载到目标数据库。

        数据实时同步:DTS同步正在进行的数据变更,并保持源数据库和目标数据库的同步。

DTS Serverless

        DTS Serverless实例是数据传输服务DTS(Data Transmission Service)提供的资源规格可以弹性变化的实例。Serverless实例可以适应不断变化的业务需求,使实例资源能够随业务规模的变化自动调整,从而避免资源浪费和控制运维成本。

        Serverless是一种动态计费方式,能够根据实例负载情况以分钟级别的动态调整资源,并实时计费(每小时生成一个收费订单),您仅需要为实际用量付费,从而节省大量成本。使用Serverless计费方式购买的实例,被称为Serverless实例。

        Serverless实例会根据RPS(Records Per Second)、CPU、内存利用率、网络等因素动态调整资源规格,调整的资源规格以DU(DTS Unit)数体现。在DU数调整后的60秒,系统会检测当前资源规格是否满足负载需求。

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

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

相关文章

centos安装软件

1.centos 安装 unrar 提示找不到 使用EPEL仓库: 首先,你需要安装EPEL仓库: yum install epel-release 然后,尝试再次安装unrar: yum install unrar 编译安装: 下载源代码:wget http://www.rarla…

对耳朵伤害最小的耳机类型是哪种?五款口碑绝佳机型安利!

​目前来说,开放式耳机应该算是对耳朵伤害最小的耳机了。当今耳机市场上,开放式耳机以其舒适的佩戴和创新的非入耳设计赢得了众多消费者的喜爱。这种耳机让你在聆听音乐的同时,还能清晰地感知周围环境的声音,便于与人交流&#xf…

clickhouse 原理详解

1、MPP数据库简介 1.1、什么是OLTP与OLAP? 1.1.1、OLTP(OnLine Transaction Processing ) 联机事务处理 系统,例如mysql。擅长事务处理,在数据操作中保持着很强的一致性和原子性 ,能够很好的支持频繁的数据插入和修改 &#x…

Java使用Tesseract进行OCR图片文字识别

前言 在当前的文字识别技术应用中,除了采用现有的API服务之外,常见的解决方案包括利用Tessdata、Canvas或OCRAD等工具。以下是对几种技术的简要分析: 百度API的使用体验表明,虽然其识别率令人满意,但并非完美无误。此…

一个月狂撸5.8W,利用AI制作宝宝走秀视频,让宝宝“出海”捞美刀

今天给大家分享的项目是**AI宝宝走秀视频玩法,**在项目拆解之前,先看一下这个账号。这个账号是在Tiktok上的,也就是海外版的抖音。 基本上都是几千万的播放,按照海外版抖音的激励计划,每播放一万次,就能赚8…

紧跟大模型技术趋势,为更大更通用的大模型提供底层支撑!关于智能计算系统:从深度学习到大模型,全新版本,发布!

文章目录 📋前言🎯 关于智能计算系统🎯 内容简介🎯 作者简介🎯 专家推荐🎯 目录大纲🔥 参与方式 📋前言 “只要你想把大模型做得更好、做得更大、做得更快、做得更省电,…

翻译软件 Fastrans 开发日志 #01

目录 预览前言功能技术待办 预览 Github 仓库链接:https://github.com/YaoqxCN/Fastrans Gitee 仓库链接:https://gitee.com/yaoqx/Fastrans 求求给我点个 star 叭 qaq 现在才是 v1.0.0,给我个 star 鼓励我继续开发下去! 我相信…

AI如何帮助普通人实现自我成长和副业变现

前言 最近有没有发现身边的一切都变得越来越"智能"了?连家里的空调都学会了自己调整温度,害得我每天起床都觉得它比我聪明。这不禁让我想到,既然连空调都在进化,我们这些普通人是不是也该搭上AI的快车,来个华…

找出所有子集异或和的和 全排列2

1863.找出所有子集异或和的和 解释&#xff1a;做本题没思路的话&#xff0c;强烈建议看本专栏上一篇博文 class Solution { public:int sum 0;int path 0;int subsetXORSum(vector<int>& nums) {dfs(nums, 0);return sum;}void dfs(vector<int>& nums,…

大模型分布式训练技术(DP、DDP和FSDP)

目录 数据并行&#xff08;PyTorch DP&#xff09; 分布式数据并行&#xff08;PyTorch DDP&#xff09; DP 与 DDP 的区别 补充说明&#xff1a;DP与DDP数据传输过程 完全分片数据并行(PyTorch FSDP) 补充说明&#xff1a;ZeRO FSDP DDP 与 FSDP 的区别 DP、DDP和FSD…

ADW400环保监测模块,用于各省市环保平台对接

ADW400环保监测模块主要用于计量低压网络的三相有功电能&#xff0c;同时可选择四个回路的电流输入&#xff0c;具有RS485通讯和470MHz无线通讯功能&#xff0c;方便用户进行用电监测、集抄和管理。可灵活安装于配电箱内&#xff0c;实现对不同区域和不同负荷的分项电能计量&am…

构建智慧园区的全方位解决方案:技术、部署与挑战应对

在当今数字化转型的浪潮中,智慧园区作为城市智能化的重要组成部分,正在成为各地政府和企业关注的焦点。本文将围绕一套完整的智慧园区解决方案,详细阐述其技术架构、部署流程以及在实施过程中可能遇到的挑战及应对策略。 1. 智慧园区解决方案概述 智慧园区解决方案旨在通过先…

Qt 一个带数据压缩的加解密实现类,压缩率达到了1/3

一.加解密效果 1-1000字符串,所占大小2890(加密前) 1-1000字符串,所占大小1964(加密后) 二.加解密功能实现类 /* Copyright (c) 2011, Andre Somers All rights reserved.Redistribution and use in…

Windows上安装 nodejs,npm 和 yarn详细教程

1、下载Node.js 访问Node.js 官网下载&#xff0c;下载需要版本版本&#xff0c;具体操作如下 2、安装Node.js 具体安装可参考以下知乎教程 https://www.zhihu.com/question/591831850/answer/3423661990 3、配置淘宝镜像 npm config set registry https://registry.npmmirror…

Codeforces Round 925 (Div. 3) E. Anna and the Valentine‘s Day Gift (博弈论*1400)

根据题目条件&#xff0c;我们知道10的m次方就是1后面跟着m个0&#xff0c;也就是说这是个最小的m1位数。 那么只要是最终得来的数的尾数是m1位数就可以通过。 思考影响数位的因素&#xff1f; 在这道题里&#xff0c;安娜能够对数位进行的操作只有删去后导零&#xff0c;由此…

安卓刷机笔记

前置知识 双清— 清除data 、 cache 四清----清除 data 、 cache 、 dalvik分区 、 system分区 四清的好处&#xff1a;卡刷ZIP格式的刷机包都是使用第三方recovery刷入的&#xff0c;所以我们在刷机之前对上一个系统的数据&#xff0c;包括用户数据、系统残留都需要彻底清除&a…

dolphinscheduler 日志乱码

dolphinscheduler 日志乱码如下图所示&#xff0c;检查服务器编码为zh_CN.UTF-8 修改$dolphinscheduler/bin/env/dolphinscheduler_env.sh 增加 JAVA_OPTS"$JAVA_OPTS -Dfile.encodingUTF-8" 参数 重新安装启动 修改前 修改后

i.MX裸机开发(10):UART——串口通讯

本章参考资料&#xff1a;《IMX6ULRM》&#xff08;参考手册&#xff09;。 学习本章时&#xff0c;配合《IMX6ULRM》Chapter 53 Universal Asynchronous Receiver/Transmitter (UART)一起阅读&#xff0c;效果会更佳&#xff0c;特别是涉及到寄存器说明的部分。 本章主要内容…

一文读懂 LLM 如何进行微调?

​你知道吗&#xff0c;咱们用那些已经训练好的大型语言模型&#xff0c;其实有好多不同的玩法。最常见的有三种&#xff1a;一种是用模型提取的特征来训练新的小模型&#xff1b;另一种是直接给模型看新任务的例子&#xff0c;让它学着怎么回答&#xff0c;这招叫做提示&#…

深度探究|软件主宰世界,我们究竟错过了什么?

这乃是知乎 COO 张宁于近期针对国内过往十年创投环境展开的深度思索。 张宁觉得&#xff0c;在过去的十年当中&#xff0c;美国硅谷专注于 SaaS 领域&#xff0c;凭借软件的标准化来提升企业的效率与经济性&#xff0c;同时倡导开放性与多样性。 中国在过去的十年里&#xff…