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

这篇具有很好参考价值的文章主要介绍了Elasticsearch和MySQL之间的数据同步问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

以下正文开始

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

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

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

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

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </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";
}

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

@Configuration
public 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 版,在软件架构领域,本书已经成为标准软件架构的术语或知识,大都可以在这本书中找到相关内容和最准确的定义。

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

本书共分为六个部分。

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

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

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

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

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

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

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

京东购买链接:点击了解

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

好了,本篇文章就先分享到这里了,后续会继续分享其他方面的知识,感谢大佬认真读完支持咯~
Elasticsearch和MySQL之间的数据同步问题

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

Elasticsearch和MySQL之间的数据同步问题文章来源地址https://www.toymoban.com/news/detail-418276.html

到了这里,关于Elasticsearch和MySQL之间的数据同步问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据同步MySQL -> Elasticsearch

    大家好我是苏麟,今天聊聊数据同步 . 一般情况下,如果做查询搜索功能,使用 ES 来模糊搜索,但是数据是存放在数据库 MySQL 里的,所以说我们需要把 MySQL 中的数据和 ES 进行同步,保证数据一致(以 MySQL 为主)。 MySQL =ES(单向) 同步方式 首次安装完 ES,把 MySQL 数据全量同步到

    2024年03月21日
    浏览(32)
  • elasticsearch与mysql数据同步

    elasticsearch中的酒店数据来自于mysql数据库,因此mysql数据发生改变时,elasticsearch也必须跟着改变,这个就是elasticsearch与mysql之间的 数据同步 。 常见的数据同步方案有三种: 同步调用 异步通知 监听binlog 1.同步调用 方案一:同步调用 基本步骤如下: hotel-demo对外提供接口,用

    2024年02月01日
    浏览(40)
  • elasticsearch实现mysql数据同步

    当酒店数据发生增、删、改时,要求对elasticsearch中数据也要完成相同操作。 常见的数据同步方案有三种: 同步调用 异步通知 监听binlog 以下使用异步通知同步elasticsearch的数据  constatnts 包下新建一个类 MqConstants,存储交换机和队列的名称 发送MQ消息   在增、删、改业务中分

    2024年02月09日
    浏览(25)
  • 补充:es与mysql之间的数据同步 2 使用分页导入的方式把大量数据从mysql导入es

    本片文章只是对之前写的文章的补充, es与mysql之间的数据同步 http://t.csdn.cn/npHt4 补充一: 之前的文章对于交换机、队列、绑定,使用的是@bean, 而这里使用的是纯注解版 在消费方,声明交换机: 补充二: 之前的文章是直接使用es操作数据,新增和修改,这样做不是很合适

    2024年02月12日
    浏览(40)
  • elasticsearch 实现与mysql 数据同步

    mysql8相关的安装可以看下另一篇博客 https://editor.csdn.net/md/?articleId=135905811 1.下载安装logstash 2.logstash 配置 logstash.yml 3.pipelines.yml 配置 同步方式: 1.logstash 2.go-mysql-elasticsearch 3.canal(阿里云) 一.logstash 1.安装mysql-connector-java 插件(需与mysql 版本一致) 2.配置logstash.conf 3.启动logsta

    2024年04月12日
    浏览(29)
  • Logstash同步MySQL数据到ElasticSearch

    当MySQL数据到一定的数量级,而且索引不能实现时,查询就会变得非常缓慢,所以使用ElasticSearch来查询数据。本篇博客介绍使用Logstash同步MySQL数据到ElasticSearch,再进行查询。 测试环境 Windows系统 MySQL 5.7 Logstash 7.0.1 ElasticSearch 7.0.1 Kibana 7.0.1 ELK工具下载可访问:https://www.elastic

    2024年02月01日
    浏览(34)
  • 基于Canal同步MySQL数据到Elasticsearch

    基于 canal 同步 mysql 的数据到 elasticsearch 中。 相关软件的安装请参考:《Canal实现数据同步》 1.1 pom依赖 1.2 SimpleCanalClientExample编写 注意当后面 canal-adapter 也连接上 canal-server 后,程序就监听不到数据变化了。 这个类只是测试,下面不使用。 由于目前 canal-adapter 没有官方dock

    2024年02月07日
    浏览(43)
  • Enterprise:使用 MySQL connector 同步 MySQL 数据到 Elasticsearch

    Elastic MySQL 连接器是 MySQL 数据源的连接器。它可以帮我们把 MySQL 里的数据同步到 Elasticsearch 中去。在今天的文章里,我来详细地描述如何一步一步地实现。 在下面的展示中,我将使用 Elastic Stack 8.8.2 来进行展示。 无缝集成:将 Elasticsearch 连接到 MongoDB Enterprise:使用 MySQL c

    2024年02月16日
    浏览(34)
  • 利用MQ实现mysql与elasticsearch数据同步

    1.声明exchange、queue、RoutingKey 2. 在hotel-admin中进行增删改(SQL),完成消息发送 3. 在hotel-demo中完成消息监听,并更新elasticsearch数据 4. 测试同步 我这里的mq是挂在了docker上,虚拟机地址是192.168.116.128。到时候这个根据自己的项目改就行 在hotel-demo中,定义配置类,声明队列、交

    2024年02月09日
    浏览(26)
  • 实战:大数据Flink CDC同步Mysql数据到ElasticSearch

    前面的博文我们分享了大数据分布式流处理计算框架Flink和其基础环境的搭建,相信各位看官都已经搭建好了自己的运行环境。那么,今天就来实战一把使用Flink CDC同步Mysql数据导Elasticsearch。 CDC简介 CDC 的全称是 Change Data Capture(变更数据捕获技术) ,在广义的概念上,只要

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包