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

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

时间:2023-09-03 21:33:48浏览次数:32  
标签:同步 -- 写入 全量 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节点。

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

本文由博客一文多发平台 OpenWrite 发布!

标签:同步,--,写入,全量,Mysql,电商,数据,节点,ES
From: https://www.cnblogs.com/JavaFly1/p/17675620.html

相关文章

  • MongoDB 会丢数据吗? 在次补刀MongoDB 双机热备
    以后会争取每天一段感悟,不讨论对错,幼儿园的孩子才每件事论对错最强大的,这个词不一定是个好词,最强大的往往是最虚弱的,那些天天和你谈格局,谈奉献,谈爱,强大的人,很可能内心和垃圾堆里面的碎玻璃一样,闪闪发光。如何和这样的人交往呢,一定要把自己碎的更厉害,发出耀眼的光,此刻他就不和你谈格......
  • 发布部署
    上线上线:指你的团队从源码管理库中获取服务代码某个版本的快照,并用它处理线上流量的过程。我认为整个上线过程由四个不同的专门的小流程组成:构建(build)、测试、部署和发布。得益于云基础架构、容器、编配框架的技术进步以及流程改进,如twelve-factor、持续集成和持续交付,执......
  • 代码随想录算法训练营第三十天| 51. N皇后 37. 解数独 总结
        卡哥建议:今天这三道题都非常难,那么这么难的题,为啥一天做三道? 因为 一刷 也不求大家能把这么难的问题解决,所以 大家一刷的时候,就了解一下题目的要求,了解一下解题思路,不求能直接写出代码,先大概熟悉一下这些题,二刷的时候,随着对回溯算法的深入理解,再去解决如下三题。 ......
  • POSTGRESQL WAL 日志问题合集之WAL 如何解析
    最近经常有同学会问关于WAL的问题,问能不能总结一下,这里我们总结关于WALwrite aheadlog的问题的一个系列在PostgreSQL writeaheadlog的解析部分,pg_waldump是必须被提起的工具,并且这个工具在不同的版本中都有变化,pg_waldump工具最早是产生于PG9.3作为一个contribmodule......
  • 用Excel函数批量校验身份证
    在将员工信息批量上传至网站时,通常会出现员工的身份证输入错误而导致无法上传成功,出现这种情况可以用Excel函数校验身份证信息是否有错误。 身份证号码中的校验码是身份证号码的最后一位,计算方法如下:1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数......
  • 领导问你忙不忙咋回答
    4人赞同了该文章领导不管问你啥,都记住一个职场话术原则:可以正面回答,但留三分余地。领导问你忙不忙,肯定不是想叫你喝茶聊天,一定要有工作要交给你。这就要分几种情况:第一种情况:上班时间这时候可以回答,“我现在正在干某某工作,请问领导有什么事吗?”这样既表示你正在勤奋......
  • k8s 说一下deployment,statefulset,daemonset 的区别
    鱼弦:全栈领域创作新星创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)在Kubernetes(K8s)中,Deployment、StatefulSet和DaemonSet是三种常用的控制器对象,用于管理应用程序的部署和运行。它们在不同的场景下有不同......
  • 探索 Rust:高性能系统编程语言的魅力与安装指南
    Rust是什么?Rust是一门系统编程语言,旨在提供高性能、并发安全和内存安全的编程环境。它于2010年首次发布,由Mozilla开发,并在开源社区的支持下不断发展壮大。优点内存安全:Rust最重要的特点之一是内存安全。它通过引入所有权(ownership)、借用(borrowing)和生命周期(lifetimes)的概念,允......
  • 电商类面试问题--01Elasticsearch与Mysql数据同步问题
    在实现基于关键字的搜索时,首先需要确保MySQL数据库和ES库中的数据是同步的。为了解决这个问题,可以考虑两层方案。全量同步:全量同步是在服务初始化阶段将MySQL中的数据与ES库中的数据进行全量同步。可以在服务启动时,对ES库进行全量数据同步操作,以确保数据的一致性。而在停止服务时......
  • Java垃圾回收全过程
    JVM中一次完整的垃圾回收(GC)过程。这里以HotSpot虚拟机为例,并将参考其中的一种常用的垃圾回收器:G1(Garbage-First)。堆的划分在HotSpotJVM中,堆(Heap)通常被划分为以下几个部分:年轻代(YoungGeneration):这部分进一步分为Eden区和两个Survivor区(S0和S1)。老年代(OldGeneration):存放长时间......