MySQL与ES数据同步方案

北京治疗白癜风哪家医院效果最好 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/ffxbdf/
背景

随着系统业务的不断发展,部分核心业务的数据规模愈发庞大,查询统计等场景愈发复杂,mysql的性能逐渐无法满足日常的使用需求,特别是各种维度的搜索场景。

这种情况下,一般都会选择将搜索的数据源从Mysql转移到ElasticSearch,但同时也需要面对两个数据源的数据如何同步问题。

方案

总的来说,数据同步方案基本分为“同步写”和“异步写”两个大方向,并在这两个大方向上进行具体实现,同时都伴随着各自的优缺点。

同步双写

同步双写,顾名思义,就是数据写入MySQL同时,需要调用ES进行数据写入,如下图:

优点:

实现简单;

相较于其他方案,数据实时性较高。

缺点:

代码耦合性强。

同步双写事务问题,性能较低。

系统可用性同时受多个数据源可用性影响,系统可用性降低;

为何强调该方案数据实时性高是相较于其他方案呢?

在默认情况下,ElasticSearch并非实时写入的,而是近实时,即对文档的修改,默认最多等待1s,就可以查询到。由于其他方案大多不是同步写,所以相对来说,本方案实时性较高。

异步双写

由于同步双写会造成系统可用性降低,那很容易想到优化方案,就是同步改成异步,如下图

关于该方案中的异步,其实有不同的实现方式,比如异步线程、异步消息订阅等实现方式。在实际工作中,一般基于消息中间件的异步消息订阅的方式来实现。

优点:

代码耦合性低,业务代码无需


转载请注明:http://www.aierlanlan.com/rzdk/6689.html