es与mysql的数据同步问题

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

方案一:同步调用

es与mysql的数据同步问题

 缺点:1.业务耦合

            2.降低整体性能

            3.当一个业务出现问题则直接卡死

方案二:异步通知(解除了两个服务之间的耦合)

es与mysql的数据同步问题

 缺点:比较依赖与mq

方案三:监听MySQL的binlog日志

es与mysql的数据同步问题

 三种方式优缺点对比

es与mysql的数据同步问题

 方案二:

1.引入依赖

<!--        amqp-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

2.编写配置文件

spring:
  rabbitmq:
    host: 192.168.2.182
    port: 5672
    username: root
    password: root
    virtual-host: /

3.编写名称的常量

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";
    /**
     * 新增或修改的Routingkey
     */
    public final static String HOTEl_INsERT_KEY= "hotel.topic";
    /**
     * 删除的Routingkey
     */
    public final static String HOTEl_DELETE_KEY = "hotel.delete";
}

4.编写配置类创建队列与交换机并绑定


@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);
    }

}

5.在发送消息的一方引入依赖和yaml中的配置

6.修改发送一方的业务

 @PutMapping()
    public void updateById(@RequestBody Hotel hotel){
        if (hotel.getId() == null) {
            throw new InvalidParameterException("id不能为空");
        }
        hotelService.updateById(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);
    }

7.在接收一方编写监听器


@Component
public class HotelListener {
    @Autowired
    private IHotelService hotelService;

    /**
     * 监听酒店新增或修改的业务
     * @param id 酒店id
     */
    @RabbitListener(queues = MqConstants.HOTEl_INSERT_QUEUE)
    public void listenHotelInsertOrUpdate(Long id){
        hotelService.inter(id);
    }

    /**
     * 监听酒店删除的业务
     * @param id 酒店id
     */
    @RabbitListener(queues = MqConstants.HOTEl_DELETE_QUEUE)
    public void listenHotelDelete(Long id){
        hotelService.deleteByid(id);
    }
}

重启服务即可实现数据同步
 文章来源地址https://www.toymoban.com/news/detail-416707.html

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

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

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

相关文章

  • Mysql 数据同步到 ES 的技术方案选型和思考

    ES 的几个显著特点,能有效补足 MySQL 在企业级数据操作场景的缺陷 文本搜索能力 :ES 是基于倒排索引实现的搜索系统,配合多样的分词器,在文本模糊匹配搜索上表现得比较好,业务场景广泛。 多维筛选性能好 :亿级规模数据使用宽表预构建(消除 join),配合全字段索引

    2024年04月09日
    浏览(51)
  • MySQL数据同步到ES的4种解决方案

    大家应该都在各种电商网站检索过商品,检索商品一般都是通过什么实现呢?搜索引擎Elasticsearch。那么问题来了,商品上架,数据一般写入到MySQL的数据库中,那么用于检索的数据又是怎么同步到Elasticsearch的呢? MySQL同步ES 这是能想到的最直接的方式,在写入MySQL,直接也同

    2024年02月08日
    浏览(55)
  • 【ElasticSearch】ES与MySQL数据同步方案及Java实现

    elasticsearch中的酒店数据来自于mysql数据库,当mysql中的数据发生改变时,es中的数据也要跟着改变,即es与mysql之间的数据同步。 操作mysql的微服务hotel-admin不能直接更新es的索引库,那就由操作es索引库的微服务hotel-demo来暴露一个更新索引库的接口给hotel-admin调用 同步调用方式

    2024年02月15日
    浏览(51)
  • MySQL与ES数据同步的四种方案及实践演示

    也就是同步调用,这是一种最为简单的方式,在将数据写到mysql时,同时将数据写到ES。 1.业务逻辑简单 2实时性高 1.硬编码,有需要写入mysql的地方都需要添加写入ES的代码 2.业务强耦合 3.存在双写失败丢数据风险 4.性能较差:本来mysql的性能不是很高,再加一个ES,系统的性

    2024年02月09日
    浏览(44)
  • es与mysql的数据同步问题

    方案一:同步调用  缺点:1.业务耦合             2.降低整体性能             3.当一个业务出现问题则直接卡死 方案二:异步通知(解除了两个服务之间的耦合)  缺点:比较依赖与mq 方案三:监听MySQL的binlog日志  三种方式优缺点对比  方案二: 1.引入依赖 2.编写配置

    2023年04月17日
    浏览(43)
  • logstash同步mysql数据到es(三、es模板问题)

     相关问题汇总: logstash同步mysql数据到es(一、es模板问题,请求返回400) logstash同步mysql数据到es(二、jdbc_driver_library问题)_(please check user and group permissions for the p-CSDN博客 logstash同步mysql数据到es(三、es模板问题)-CSDN博客 使用docker实现logstash同步mysql到es-CSDN博客 [INFO ] 2023-12-11 09

    2024年01月17日
    浏览(79)
  • MySQL同步ES方案

    在项目开发中,我们经常将 MySQL 作为业务数据库,ES 作为查询数据库,用来实现读写分离,缓解 MySQL 数据库的查询压力,应对海量数据的复杂查询。 这其中有一个很重要的问题,就是如何实现 MySQL 数据库和 ES 的数据同步,今天和大家聊聊 MySQL 和 ES 数据同步的各种方案。

    2024年04月11日
    浏览(44)
  • 4种 MySQL 同步 ES 方案

    数据同步是一个很常见的业务场景。本文会讲述数据同步的 4 种方案,并给出常用数据迁移工具,干货满满! 在实际项目开发中,我们经常将 MySQL 作为业务数据库,ES 作为查询数据库,用来实现读写分离,缓解 MySQL 数据库的查询压力,应对海量数据的复杂查询。 这其中有一

    2024年02月08日
    浏览(36)
  • MySQL同步ES的几种方案

    MySQL数据同步ES的几种方案 1. 同步双写         与业务耦合深,且业务响应时间长 2. 异步双写         这时可以使用类似MQ这样的中间件,业务主写时向MQ发送一条信息,再由一个聚合服务区消费,最终同步到ES 3. 定时任务         不好配置时间,频率高会出现明显的

    2024年01月20日
    浏览(39)
  • 这4 种 MySQL 同步 ES 方案,真是yyds!

    上周听到公司同事分享 MySQL 同步数据到 ES 的方案,发现很有意思,感觉有必要将这块知识点再总结提炼一下,就有了这篇文章。 本文会先讲述数据同步的 4 种方案,并给出常用数据迁移工具 ,干货满满! 不 BB,上文章目录: 在实际项目开发中,我们经常将 MySQL 作为业务数

    2024年02月08日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包