上周听到公司同事分享 MySQL 同步数据到 ES 的方案,发现很有意思,感觉有必要将这块知识点再总结提炼一下,就有了这篇文章。 本文会先讲述数据同步的 4 种方案,并给出常用数据迁移工具,干货满满!
不 BB,上文章目录: 1. 前言
在实际项目开发中,我们经常将 MySQL 作为业务数据库,ES 作为查询数据库,用来实现读写分离,缓解 MySQL 数据库的查询压力,应对海量数据的复杂查询。
这其中有一个很重要的问题,就是如何实现 MySQL 数据库和 ES 的数据同步,今天和大家聊聊 MySQL 和 ES 数据同步的各种方案。
我们先看看下面 4 种常用的数据同步方案。
2. 数据同步方案
2.1 同步双写
这是一种最为简单的方式,在将数据写到 MySQL 时,同时将数据写到 ES。 优点:
业务逻辑简单;
实时性高。
缺点:
硬编码,有需要写入 MySQL 的地方都需要添加写入 ES 的代码;
业务强耦合;
存在双写失败丢数据风险;
性能较差,本来 MySQL 的性能不是很高,再加一个 ES,系统的性能必然会下降。
2.2 异步双写
针对多数据源写入的场景,可以借助 MQ 实现异步的多源写入。 优点:
性能高;
不易出现数据丢失问题,主要基于 MQ 消息的消费保障机制,比如 ES 宕机或者写入失败,还能重新消费 MQ 消息;