行业资讯 2025年08月6日
0 收藏 0 点赞 425 浏览 949 个字
摘要 :

文章目录 1,双写 2,MQ 异步消费 3,扫表定时同步 4,监听binlog 本文主要讲解关于五,如何如何保证ES与数据库数据的一致性相关内容,让我们来一起学习下吧! 在使用e……




  • 1,双写
  • 2,MQ 异步消费
  • 3,扫表定时同步
  • 4,监听binlog

本文主要讲解关于五,如何如何保证ES与数据库数据的一致性相关内容,让我们来一起学习下吧!

在使用es 的场景中,我们通常不会单单只用es,数据库存储也同时在用。 那么如何保证数据库和ES 的一致性呢?

我们通常有以下几种做法:

1,双写

在Java代码中,对数据库和 ES进行双写,并且先操作 数据库,后操作ES,而且还需要把两个操作放到同一个事务中去。

@Transactional (rollbackFor = Exception)
public void update (Dta dta){
   updateDb(dta);
   updateEs(dta);
}

在以上逻辑中,如果ES 同步失败 事务会回滚。

如果写数据库成功,ES  超时,实际上ES 成功,这时候数据库回滚,导致数据不一致。这时候需要重试来保证最终一致性。

优点: 简单,容易实现,并且实时性比较高。

缺点: 需要改代码,有侵入性,存在不一致情况。  本地事务中发生了外部调用 使得事务拉长,占用数据库连接,影响整体吞吐。

2,MQ 异步消费

在应用中,如果我们更新数据库了,那么就发一个mq 消息,然后数据库和Es 各自有个消费者, 各自进行消费,如果失败了 mq 有重试机制。

或者先入库,入库成功后,发个消息给es 消费。

优点:使用了mq ,进行了解耦。 异步操作提升性能。

缺点:mq 存在延迟,引入中间件增加系统复杂性。

3,扫表定时同步

如果数据实时性要求不高,可以定时扫表批量更新es.

优点:没有入侵性,不耦合。

缺点:实时性差,轮询可能影响性能。给数据库查询带来压力。

4,监听binlog

通过监听数据库实时产生的binlog 来更新es ,目前市面上已经有成熟的架构可以使用。例如使用canal +kafka 对binlog 进行监听 消息队列进行消费。控制一致性。

优点:没有侵入性,解耦。对数据库也没什么压力。

缺点:需要引入第三方架构,增加系统复杂性。

拓展:

除了ES 与 数据库(mysql)数据一致性问题可以通过 cannal + Kafka 进行同步。 Redis 缓存也可以采用同样的方法。用于缓存与业务代码解耦。

以上就是关于如何保证ES与数据库数据的一致性相关的全部内容,希望对你有帮助。欢迎持续关注潘子夜个人博客(www.panziye.com),学习愉快哦!

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9848.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

986
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

463
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

347
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

455
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

516
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

831
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号