电商类面试问题--01Elasticsearch与Mysql数据同步问题

在实现基于关键字的搜索时,首先需要确保MySQL数据库和ES库中的数据是同步的。为了解决这个问题,可以考虑两层方案。

  1. 全量同步:全量同步是在服务初始化阶段将MySQL中的数据与ES库中的数据进行全量同步。可以在服务启动时,对ES库进行全量数据同步操作,以确保数据的一致性。而在停止服务时,可以清空ES的缓存库,以便下次启动服务时进行全量同步。
  2. 增量同步:为了实现热同步,即在不重启服务的情况下保持数据的同步,可以使用增量同步来处理新的或修改过的数据。有几种增量同步的实现方式可供选择。
  • 同步双写:最初的方案是通过同步双写的方式,在MySQL中有数据插入或修改时,同时对ES中的数据进行同步更新或插入。然而,由于这种方式会导致代码的耦合性较高,这是个劣势,面试可以点一下。
  • 异步双写:为了解决代码耦合性的问题,引入了RabbitMQ作为中间件。在数据写入ES之前,数据先被发送到RabbitMQ中,然后RabbitMQ消费数据并将其写入ES。如果写入失败,可以采取熔断降级策略,将数据发送到死信队列,并进行重试,直到成功写入ES为止。虽然这种方式可能会存在一些延时,但相对于保证数据一致性而言,是可以容忍的。

优化方案: 为了进一步优化数据同步的性能和可靠性,还可以考虑了以下方案:

  • 批量同步:将多条记录批量写入ES,而不是每条记录都发送一次请求,可以减少网络开销并提高写入性能。
  • 并发同步:使用多线程或异步任务来并行处理同步操作,从而提高同步速度和吞吐量。
  • 数据过滤:根据需求过滤需要同步的数据,避免同步无关的数据,减少同步工作量和资源消耗。
  • 监控和重试机制:实现监控和报警机制,及时发现同步异常或失败,并进行相应的重试或错误处理。

另外,还考虑到每次关闭和重启服务时全量同步时间逐渐增长的问题。

解决方案是设置两个ES服务器副本。一个服务器(A节点)一直进行同量写入,并将数据同时写入主节点(A节点)和备份节点(B节点)。当需要升级A节点时,可以切换请求到B节点,暂停A节点的服务进行升级,而B节点继续提供服务。这样就实现了数据的无缝衔接,在不需要大量同步时间的情况下完成搜索服务的执行。待A节点完成升级后,再将其与B节点进行数据同步,然后切回A节点。

通过上述优化措施,可以进一步提高数据同步的性能、效率和可靠性。
喜欢关注一下呀

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

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

相关文章

华为OD机考算法题:简单的自动曝光

题目部分 题目简单的自动曝光难度易题目说明一个图像有 n 个像素点,存储在一个长度为n的数组img里,每个像素点的取值范围 [0,255] 的正整数。 请你给图像每个像素点值加上一个整数k(可以是负数),得到新图n…

二分搜索树层序遍历(Java 实例代码)

目录 二分搜索树层序遍历 Java 实例代码 src/runoob/binary/LevelTraverse.java 文件代码: 二分搜索树层序遍历 二分搜索树的层序遍历,即逐层进行遍历,即将每层的节点存在队列当中,然后进行出队(取出节点&#xff0…

注意力机制讲解与代码解析

一、SEBlock(通道注意力机制) 先在H*W维度进行压缩,全局平均池化将每个通道平均为一个值。 (B, C, H, W)---- (B, C, 1, 1) 利用各channel维度的相关性计算权重 (B, C, 1, 1) --- (B, C//K, 1, 1) --- (B, C, 1, 1) --- sigmoid 与原特征相…

Jmeter进阶使用指南-使用参数化

Apache JMeter是一个广泛使用的开源负载和性能测试工具。在进行性能测试时,我们经常需要模拟不同的用户行为和数据,这时候,参数化就显得尤为重要。此文主要介绍如何在JMeter中使用参数化。 什么是参数化? 参数化是一种将静态值替…

多线程同步有哪几种方法?

有多种方法可以实现多线程同步,以下是一些常见的同步机制和方法: Synchronized 关键字:使用 synchronized 关键字可以将代码块或方法标记为同步块,以确保只有一个线程可以同时访问被同步的代码块或方法。这是最常见的同步方法,适用于简单的同步需求。ReentrantLock:Reent…

机器学习:自然语言处理上的对抗式攻击

Attacks in NLP 相关话题 Introduction 以前的攻击专注于图像和语音上,而NLP上的内容比较少。而NLP的复杂度跟词典有关系: NLP只能在embedding后的特征上加噪声 Evasion Attacks 电影的评论情感分类,将film换成films后,评论从…

SQL中CASE的用法

在SQL中,CASE语句是一种条件表达式,用于根据条件执行不同的操作。它有两种形式:简单CASE表达式和搜索CASE表达式。 简单CASE表达式的语法如下: CASE expressionWHEN value1 THEN result1WHEN value2 THEN result2...ELSE result …

算法通关村第十三关——幂运算问题解析

前言 幂运算为常见的数学运算,形式为 a b a^b ab ,其中a为底数,b为指数, 力扣中,幂运算相关的问题主要是判断一个数是不是特定正整数的整数次幂,以及快速幂的处理。 1.求2的幂 力扣231题,给…

open与fopen的区别

1. 来源 从来源的角度看,两者能很好的区分开,这也是两者最显而易见的区别: open是UNIX系统调用函数(包括LINUX等),返回的是文件描述符(File Descriptor),它是文件在文件…

制作立体图像实用软件:3DMasterKit 10.7 Crack

3DMasterKit 软件专为创建具有逼真 3D 和运动效果的光栅图片而设计:翻转、动画、变形和缩放。 打印机、广告工作室、摄影工作室和摄影师将发现 3DMasterKit 是一种有用且经济高效的解决方案,可将其业务扩展到新的维度,提高生成的 3D 图像和光…

leecode 数据库:1174. 即时食物配送 II

数据导入: Create table If Not Exists Delivery (delivery_id int, customer_id int, order_date date, customer_pref_delivery_date date); Truncate table Delivery; insert into Delivery (delivery_id, customer_id, order_date, customer_pref_delivery_date…

STM32低功耗分析

1.ARM发布最新内核 2023 年5 月 29 日,Arm 公司今天发布了处理器核心:Cortex-X4、Cortex-A720 和Cortex-A520。这些核心都是基于 Arm v9.2 架构,只支持 64 位指令集,不再兼容 32 位应用。Arm 公司表示,这些核心在性能…

postgresql-常用日期函数

postgresql-常用日期函数 简介计算时间间隔获取时间中的信息截断日期/时间创建日期/时间获取系统时间时区转换 简介 PostgreSQL 提供了以下日期和时间运算的算术运算符。 获取当前系统时间 select current_date,current_time,current_timestamp ;-- 当前系统时间一周后的日…

Selenium - Tracy 小笔记2

selenium本身是一个自动化测试工具。 它可以让python代码调用浏览器。并获取到浏览器中加们可以利用selenium提供的各项功能。帮助我们完成数据的抓取。它容易被网站识别到,所以有些网站爬不到。 它没有逻辑,只有相应的函数,直接搜索即可 …

list的用法

list的用法 1、list的遍历2、list的头插、头删、尾插、尾删 【其时间复杂度都是:O(1)】3、find\insert\erase4、sort&#xff1a;底层用的排序思想是 mergesort【归并排序】 1、list的遍历 #include <iostream> #include <list> #include <algorithm> using…

在Linux系统上用C++将主机名称转换为IPv4、IPv6地址

在Linux系统上用C将主机名称转换为IPv4、IPv6地址 功能 指定一个std::string类型的主机名称&#xff0c;函数解析主机名称为IP地址&#xff0c;含IPv4和IPv6&#xff0c;解析结果以std::vector<std::string>类型返回。解析出错或者解析失败抛出std::string类型的异常消…

用友U8与MES系统API接口对接案例分析

企业数字化转型&#xff1a;轻易云数据集成平台助力 U8 ERPMES 系统集成 为什么选择数字化转型&#xff1f; 领导层对企业资源规划&#xff08;ERP&#xff09;的深刻理解促使了数字化转型的启动。采用精确的“N5”滚动计划&#xff0c;为供应商提供充分的预期信息&#xff0c…

Tomcat多实例与负载均衡

Tomcat多实例与负载均衡 一、Tomcat多实例1.1、安装JDK1.2、安装tomcat1.3、配置tomcat环境变量1.4、修改tomcat中的主配置文件1.5、修改启动脚本和关闭脚本1.6、 启动tomcat并查看 二、NginxTomcat负载均衡、动静分离2.1、部署Nginx负载均衡2.2、部署第一台tomcat2.3、部署第二…

Linux find

1.find介绍 linux查找命令find是linux运维中很重要、很常用的命令之一&#xff0c;find用于根据指定条件的匹配参数来搜索和查找文件和目录列表&#xff0c;我们可以通过权限、用户、用户组、文件类型、日期、大小等条件来查找文件。 2.find语法 find语法 find [查找路径] …

【Jetpack】Jetpack 简介 ( 官方架构设计标准 | Jetpack 组成套件 | Jetpack架构 | Jetpack 的存在意义 | AndroidX 与 Jetpack 的关系 )

文章目录 一、Google 官方推出的架构设计标准 Jetpack二、Jetpack 组成套件三、Jetpack 架构四、Jetpack 的存在意义1、提高开发效率2、最佳架构方案3、消除样本代码4、设备系统兼容性5、改善应用性能6、测试支持 五、AndroidX 与 Jetpack 的关系 一、Google 官方推出的架构设计…