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

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

时间:2023-09-03 21:32:35浏览次数:51  
标签:同步 -- 写入 全量 Mysql 电商 数据 节点 ES

在实现基于关键字的搜索时,首先需要确保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节点。

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

标签:同步,--,写入,全量,Mysql,电商,数据,节点,ES
From: https://blog.51cto.com/u_15403127/7343360

相关文章

  • Java垃圾回收全过程
    JVM中一次完整的垃圾回收(GC)过程。这里以HotSpot虚拟机为例,并将参考其中的一种常用的垃圾回收器:G1(Garbage-First)。堆的划分在HotSpotJVM中,堆(Heap)通常被划分为以下几个部分:年轻代(YoungGeneration):这部分进一步分为Eden区和两个Survivor区(S0和S1)。老年代(OldGeneration):存放长时间......
  • 9-3|使用Python的scikit-learn库来训练一个逻辑回归模型,检测句子是否含有侮辱性内容:
    当然可以。以下是一个简单的例子,使用Python的`scikit-learn`库来训练一个逻辑回归模型,检测句子是否含有侮辱性内容:```pythonfromsklearn.feature_extraction.textimportTfidfVectorizerfromsklearn.linear_modelimportLogisticRegressionfromsklearn.model_selectionim......
  • MySql中 BufferPool 的基本概念介绍
    MySQL的BufferPool是MySQL数据库引擎用来缓存数据页(页是磁盘上的一块固定大小的数据单元)的内存区域。BufferPool在MySQL服务器启动时被初始化,然后在整个数据库生命周期中用于高效地管理数据库页的读取和写入。BufferPool是MySQL性能的关键组成部分之一,因为它可以显著减少与磁盘I......
  • CDC一键入湖:当 Apache Hudi DeltaStreamer 遇见 Serverless Spark
    ApacheHudi的DeltaStreamer是一种以近实时方式摄取数据并写入Hudi表的工具类,它简化了流式数据入湖并存储为Hudi表的操作,自0.10.0版开始,Hudi又在DeltaStreamer的基础上增加了基于Debezium的CDC数据处理能力,这使得其可以直接将Debezium采集的CDC数据落地成Hudi表,这一功能极大地简......
  • final、finally、finalize的区别
    在Java中,final、finally和finalize是三个不同的概念。final是一个关键字,用于修饰类、方法和变量。当用final修饰一个类时,该类不能被继承;当用final修饰一个方法时,该方法不能被子类重写;当用final修饰一个变量时,该变量成为一个常量,其值不能被修改。finally也是一个关键字,用于定......
  • Linux常用命令
    ipaddr:查看IPshutdown-hnow:立即关机 reboot:重启Pingip或域名:查看网络是否OKctrl+c:强制结束占用窗口的命令top:查看内存情况kill-9pid:强制杀死指定进程ps-ef|grep-i进程名字:查看进程运行信息(|管道命令)clear:清屏history:查看历史命令ls:列出目录内容示例:ls-......
  • 微服务 - Nacos
    目录Nacos认识和安装服务注册Nacos认识和安装Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高官网:nacos.io#启动startup.cmd-mstandalone启动成功后访问:http://192.168.222.1:8848/nacos/index.html默认的账号......
  • Redis—分布式锁
    单实例的正确实现方式获取锁的正确操作为:SETresource_namemy_random_valueNXPX30000,它限定了只有当锁空闲且持有锁的时间为30000ms,并且锁资源对应的value为一个随机值。设置随机值是为了在释放锁时,确保当前线程能够释放该锁,避免出现操作超时的线程释放了其它线程的锁。......
  • 数字三角形
    一般指那种矩形上的二维DP。母题考虑向下DP,每个点可以从上、上向右一格转移过来,复杂度\(O(r^2)\)。1做两遍,然后两个是一起走的,所以只需要直到一个的坐标和另外一个点的一个坐标,就可以推出四个坐标。状态就是四个坐标(当然也可以记录差值),然后主要就考虑转移时会不会到达一个点......
  • NSSCTF 2nd Crypto复现
    1,EzRSA题目代码:fromCrypto.Util.numberimport*fromsecretimportflagm=bytes_to_long(flag)assertm.bit_length()<200p=getPrime(512)q=getPrime(512)n=p*qe=3c=pow(m,e,n)kbits=103m=(m>>kbits)<<kbitsMod=getPrime......