avatar

目录
ES数据和数据库数据不一致时怎么办?

    考虑到ElasticSearch优秀的索引和检索性能,项目中使用ES作为前台搜索引擎,但是在创建和更新ES数据的时候,由于种种原因,可能会出现ES更新失败,造成ES数据和数据库最新真实数据出现不一致的现象。在做项目的过程中整理了一下四种解决方案:

  • 1、开一张表专门记录创建和更新ES数据失败的信息(比如我们项目中主需要记录主表ID,更新数据时根据ID组装数据),然后设置一个定时任务,定时向ES更新失败的数据;
  • 2、小批量、多批次更新;通俗讲就是设置固定时间间隔,然后更新先前一段时间的数据,比如每隔10分钟,全量更新前20分钟的数据;缺点就是有些数据正常的数据也更新了,消耗性能;
  • 3、大批量,小批次更新;和第二条阐释类似,比如在每天夜晚2点种,全量更新某一时间段范围(1或2天)、某一标签或类别(商品、服务)、某一地区、某类用户画像等等可以分类分区的数据;
  • 4、定时任务,异步全量查询数据库表,开多线程,更新ES;消耗大量资源,且全量更新数据库表也不科学;

我司另一个项目组采用方案2,但是从消耗资源和技术设计角度讲,我认为上述四条方案中,方案1最佳,方案4最差。

    有考虑不周或不对的地方,还请各路大神敬请留言,不吝赐教

文章作者: 海东青
文章链接: https://haohaogit.github.io/2020/01/02/ES%E6%95%B0%E6%8D%AE%E5%92%8C%E6%95%B0%E6%8D%AE%E5%BA%93%E6%95%B0%E6%8D%AE%E4%B8%8D%E4%B8%80%E8%87%B4%E6%97%B6%E6%80%8E%E4%B9%88%E5%8A%9E%EF%BC%9F/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hexo
打赏
  • 微信
    微信
  • 支付宝
    支付宝