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