mysql与ElasticSearch数据同步方案

前言

我们都知道,在mysql数据表超过千万级别后查询将变得非常的慢,只有通过搜索引擎ES才能解决性能瓶颈的问题,况且ES是hadoop的生态圈,为大数据提供搜索的引擎,所以性能完成满足要求

同步方案

首先,要把mysql数据导入ES,(怎么导入这里不再讲解,网上资料比较多)

  • 方案一

    监听mysql的binlog,分析binlog将数据同步到ES集群中

    优点:业务与ES数据耦合度低,业务逻辑中不需要关心ES数据的写入。

    缺点:binglog模式只能使用ROW模式,且引入了新的同

  • 方案二

直接通过ES API将数据写入到ES集群中,也就是写入数据库的同时调用ES API写入到ES中

优点:简洁明了,能够灵活的控制数据的写入
缺点:与业务耦合严重,强依赖于业务系统的写入方式

总结

同时需要考虑系统的特性,是否需要实时服务,并且要求强一致性。
如果要求,采用方案二,然后做补偿操作,出现失败直接放在队列或者 worker 里面重试,如果重试不成功记录日志和告警,排查问题后做人工补偿。
如果没有要求直接采用 binlog 的读写。

如果你觉得有用,请关注我吧_

在这里插入图片描述