我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Elasticsearch和MySQL之间的数据同步问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Elasticsearch和MySQL之间的数据同步问题

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章参考网上的课程,介绍Elasticsearch和MySQL之间的数据同步问题。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
在这里插入图片描述

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

在这里插入图片描述

以下正文开始

文章目录

在这里插入图片描述

Elasticsearch中的数据是来自于Mysql数据库的,因此当数据库中的数据进行增删改后,Elasticsearch中的数据,索引也必须跟着做出改变。而对于管理服务(MySQL)和搜索服务(Elasticsearch)往往会在不同的微服务上。

可以通过微服务之间的同步调用来解决数据同步问题,虽然实现起来比较简单,但是在搜索服务中引入管理服务时,业务的耦合度相对来说是比较高的。因此可以通过消息队列的形式来异步通知管理服务的改变。这样做的有优点是耦合度较低,但是依赖于消息队列的耦合度。

下面根据一个例子来介绍使用RabbitMQ来解决Elasticsearch和MySQL之间的数据同步问题。当酒店数据库中发送增删改时,Elasticsearch中的数据也同时发生对应的改变。

首先在两块微服务中引入RabbitMQ的依赖:
引入依赖

        <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-starter-amqpartifactId>        dependency>

创建常量类,将交换机和队列名称设置为常量,使用时方便取名。

public class MqConstants {        public final static String HOTEL_EXCHANGE = "hotel.topic";        public final static String HOTEL_INSERT_QUEUE = "hotel.insert.queue";        public final static String HOTEL_DELETE_QUEUE = "hotel.delete.queue";        public final static String HOTEL_INSERT_KEY = "hotel.insert";        public final static String HOTEL_DELETE_KEY = "hotel.delete";}

创建配置类,声明交换机,并将路由键,队列与交换机之间互相绑定:

@Configurationpublic class MqConfig {    @Bean    public TopicExchange topicExchange(){        return new TopicExchange(MqConstants.HOTEL_EXCHANGE,true,false);    }    @Bean    public Queue insertQueue(){        return new Queue(MqConstants.HOTEL_INSERT_QUEUE,true);    }    @Bean    public Queue deleteQueue(){        return new Queue(MqConstants.HOTEL_DELETE_QUEUE,true);    }    @Bean    public Binding insertQueueBinding(){        return BindingBuilder.bind(insertQueue()).to(topicExchange()).with(MqConstants.HOTEL_INSERT_KEY);    }    @Bean    public Binding deleteQueueBinding(){        return BindingBuilder.bind(deleteQueue()).to(topicExchange()).with(MqConstants.HOTEL_DELETE_KEY);    }}

编写controller层,将酒店数据保存到数据库中,并将消息发送到消息队列里:

    @Autowired    private IHotelService hotelService;    @Autowired    private RabbitTemplate rabbitTemplate;    @PutMapping    public void save(@RequestBody Hotel hotel){        hotelService.save(hotel);        rabbitTemplate.convertAndSend(MqConstants.HOTEL_EXCHANGE,MqConstants.HOTEL_INSERT_KEY,hotel.getId());    }    @DeleteMapping("/{id}")    public void deleteById(@PathVariable("id") Long id){        hotelService.removeById(id);        rabbitTemplate.convertAndSend(MqConstants.HOTEL_EXCHANGE,MqConstants.HOTEL_DELETE_KEY,id);    }

在service中加入两个方法,根据id增加和根据id删除:

    void insertById(Long id);    void deleteById(Long id);

利用Ctrl+Alt+B的快捷键,在service的实现类里面重写方法进行实现:

    @Override    public void insertById(Long id) {        try {            Hotel hotel = getById(id);            HotelDoc hotelDoc = new HotelDoc(hotel);            // 1.准备Request            IndexRequest request = new IndexRequest("hotel").id(hotelDoc.getId().toString());            // 2.准备请求参数DSL,其实就是文档的JSON字符串            request.source(JSON.toJSONString(hotelDoc), XContentType.JSON);            // 3.发送请求            client.index(request, RequestOptions.DEFAULT);        } catch (IOException e) {            throw new RuntimeException(e);        }    }    @Override    public void deleteById(Long id) {        try {            DeleteRequest request = new DeleteRequest("hotel", id.toString());            // 2.发送请求            client.delete(request, RequestOptions.DEFAULT);        } catch (IOException e) {            throw new RuntimeException(e);        }    }

这样即可完成Elasticsearch和MySQL之间的数据同步。

图书推荐
在比尔 · 盖茨的众多称谓中,据说他更偏爱“首席软件架构师”。在网易创始人丁磊名字前,也有“首席架构师”这样的称谓。架构师是如此重要,以至于在《黑客帝国》 中各色人物悉数登场,最后你却发现这一切都是被一个称作“架构师”的白胡子老头左 右的。

这是否意味着要成为架构师就要以“领导”权威来支撑或者以时间或实践来积累? 当然不必这样,在修炼成“架构师”的道路上,一本好书能让你少走许多弯路,帮助你学会“架构师”思维,快速进入“架构师”角色。

随着数字时代的到来,各种云基础设施、微服务、框架层出不穷,互联和互操作变 得唾手可得,集成和重用已有成果成为软件开发常态。在软件系统变得越来越复杂的同时,今天架构师似乎不再需要架构知识了,甚至软件开发的精髓被调侃是“ Ctrl+C 和 Ctr1+V ”。显然,在已有的架构上实现二次架构设计并不是架构师的未来,我们既要站 在巨人的肩膀上, 善于利用后发优势, 更需要从原始创新上取得突破, 这就需要你回到 问题的原点,系统地掌握软件架构的知识,努力贡献优秀的原创架构。

《软件架构实践》就是这样一本书。本书是其第 4 版,在软件架构领域,本书已经成为标准软件架构的术语或知识,大都可以在这本书中找到相关内容和最准确的定义。

图片

本书共分为六个部分。

第一部分对软件架构进行了定义,并从13个方面揭示软件架构的重要性,希望这13个方面能激起你学习软件架构的兴趣。

第二部分是关于质量属性的,你如果还分不清“可用性”(availability)和“易用性”(Usability)的差别,或觉得“安全性”(safety)和“防护性”(security)就是一回事,那么应该仔细看看这一部分。这部分对10个颇具代表性的质量属性进行了全面介绍,给出了一种通用形式来描述质量属性,介绍了每个质量属性要关注的问题并给出了现成的“解决方案”,你甚至可以直接把这些 知识运用到你当前的设计中去。

第三部分具有很强的时代感,紧密结合当前最流行的技术,包括虚拟化、云计算和移动技术,介绍了当下架构解决方案要关注的内容

第四部分可扩展架构实践,为设计架构、架构评估和记录架构等活动提供了可操作的工程方法,旨在为完成这些复杂的架构活动提供指南,帮助普通人学习并熟练地完成架构相关工作。如果面对复杂设计你还不知从何下手,则完全可以按照书中介绍的工程方法和交付样式“照猫画虎”,相信通过亲自实践你会掌握书中方法的精髓。

第五部分全面介绍了架构师在组织中的角色和应具备的能力,架构师不能活在象牙塔里,这部分知识可以让你根据个人的情况和组织的发展要求,找到自己的努力方向,理解相关处境,做出正确 选择。最后一部分介绍了最新的量子计算,并思考了其可能对架构的影响,也算是为读 者留下一些悬念。

图片

本书可以作为架构师的工具书,你不必从头开始,根据遇到的问题,找到相应章节就可以得到参考架构解决方案你也可以把它当作工程行动指南,面对复杂问题,按照其中介绍的方法采取相应行动即可。本书将理论和实践紧密结合,如果你的组织很重视 架构,但常常出现曲高和寡和不落地现象,时间比较充裕的话,可以好好阅读一下本书哦。

京东购买链接:点击了解

评论区任意留言可参与活动抽奖(评论最多五条,抽取四名欧皇)

好了,本篇文章就先分享到这里了,后续会继续分享其他方面的知识,感谢大佬认真读完支持咯~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
希望能和诸佬们一起努力,今后我们顶峰相见🍻
再次感谢各位小伙伴儿们的支持🤞

在这里插入图片描述

来源地址:https://blog.csdn.net/qq_53847859/article/details/130210116

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Elasticsearch和MySQL之间的数据同步问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Elasticsearch和MySQL之间的数据同步问题

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章参考网上的课程,介绍Elasticsearch和MySQL之间的数据同步问题。 如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。 小威在此
2023-08-19

一文详解Elasticsearch和MySQL之间的数据同步问题

Elasticsearch中的数据是来自于Mysql数据库的,因此当数据库中的数据进行增删改后,Elasticsearch中的数据,索引也必须跟着做出改变。本文主要来和大家探讨一下Elasticsearch和MySQL之间的数据同步问题,感兴趣的可以了解一下
2023-05-16

【elasticsearch专题】:Logstash从入门到同步MySQL数据

文章目录 1. 引言1.1 什么是Logstash?1.2 Logstash的主要特点 2. 下载与配置2.1 下载2.2 文件结构2.3 环境配置 3. Logstash三大核心组件3.1 Input3.2 Filter3
【elasticsearch专题】:Logstash从入门到同步MySQL数据
2023-12-23

MySQL数据同步Elasticsearch的4种方案

目录1.同步双写2.异步双写3.定时任务4.数据订阅今天给大家介绍一个电商中常见的场景 —— mysql 数据同步 Elasticsearch。商品检索大家应该都在各种电商网站检索过商品,检索商品一般都是通过什么实
2023-03-20

MySQL数据同步Elasticsearch的方案有哪些

本篇内容介绍了“MySQL数据同步Elasticsearch的方案有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!商品检索大家应该都在各
2023-07-05

同步MySQL数据至Elasticsearch的方式有哪些

这篇文章主要介绍了同步MySQL数据至Elasticsearch的方式有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇同步MySQL数据至Elasticsearch的方式有哪些文章都会有所收获,下面我们一起
2023-06-05

MySQL数据同步出现Slave_IO_Running: No问题的解决

本人最近工作中遇到了Slave_IO_Running:NO报错的情况,通过查找相关资料终于解决了,下面这篇文章主要给大家介绍了关于MySQL数据同步出现Slave_IO_Running: No问题的解决方法,需要的朋友可以参考下
2023-05-19

MySQL数据同步出现Slave_IO_Running: No问题的解决

目录原因:解决办法:1:使用 find / -inhttp://www.cppcns.comame "auto.cnf" 命令查找你数据库的auto.cnf 配置文件。2:对这个配置文件的uuid进行更改。 3:重新启动mysql4:&nb
2023-05-12

docker之MySQL同步数据的实现

目录第一步先获取镜像,版本选择了mysql5.7第二步运行MySQL容器测试连接MySQL进行验证实验的过程分为4步:获取mysql镜像运行一个mysql容器测试连接mysql验证第一步先获取镜像,版本选择了MySQL5.7[root
2022-07-06

Elasticsearch分布式搜索中的数据同步与一致性保障(Elasticsearch如何确保分布式搜索数据的一致性和同步?)

Elasticsearch采用多项策略确保分布式搜索中的数据一致性和同步性:主分片和副本分片:写入请求由主分片处理,并复制到副本分片。写入协调:更改传播到副本分片之前,由主分片确认。刷新和提交:定期刷新确保数据在内存中可用,提交永久存储数据。同步复制:更改从主分片复制到副本分片,确保同步。确认机制:副本分片确认更改已接收,以确认写入成功。分块快照和文件系统快照:提供数据复制和恢复选项。
Elasticsearch分布式搜索中的数据同步与一致性保障(Elasticsearch如何确保分布式搜索数据的一致性和同步?)
2024-04-02

编程热搜

目录