Easy-Es Easy-Es
💋首页
  • v3.0.0(当前版本)
  • What's New

    • What' s New In Easy-Es v3.0.0?
  • 历史版本

    • v1.x.x
    • v2.x.x
  • 升级指南

    • 升级到3.x.x说明
💖赞助
  • 开源社区
  • 周边好物
  • 项目PPT (opens new window)
  • 项目介绍
  • 项目成员
  • 参与贡献
加入社区讨论
谁在使用
  • Doc-Apis (opens new window)
  • 健身计划一键生成系统 (opens new window)
  • 极氪汽车
  • Vuepress-theme-vdoing (opens new window)
  • Gitee (opens new window)
  • GitCode (opens new window)
  • Github (opens new window)
  • 简体中文 (opens new window)
  • English (opens new window)

广告采用随机轮播方式显示 ❤️成为赞助商
💋首页
  • v3.0.0(当前版本)
  • What's New

    • What' s New In Easy-Es v3.0.0?
  • 历史版本

    • v1.x.x
    • v2.x.x
  • 升级指南

    • 升级到3.x.x说明
💖赞助
  • 开源社区
  • 周边好物
  • 项目PPT (opens new window)
  • 项目介绍
  • 项目成员
  • 参与贡献
加入社区讨论
谁在使用
  • Doc-Apis (opens new window)
  • 健身计划一键生成系统 (opens new window)
  • 极氪汽车
  • Vuepress-theme-vdoing (opens new window)
  • Gitee (opens new window)
  • GitCode (opens new window)
  • Github (opens new window)
  • 简体中文 (opens new window)
  • English (opens new window)
  • 快速入门

    • 简介
    • 适用场景
    • 顾虑粉碎
    • 避坑指南
    • 快速开始
    • springboot集成demo
    • spring集成指南
    • solon集成指南
    • 配置
    • 注解
  • 核心功能

    • 条件构造器

      • 条件构造器介绍
      • 索引条件构造器
      • 查询条件构造器
      • 更新条件构造器
    • 索引CRUD

      • 索引托管模式
      • 索引CRUD
    • 数据CRUD

      • 数据同步方案
        • 背景
        • 全量同步
        • 增量同步
      • 数据CRUD
    • 多数据源支持
    • 动态索引支持
    • 四大嵌套查询
    • 链式调用
  • 拓展功能

    • 混合查询
    • 原生查询
    • 分页查询
    • 嵌套类型
    • Join父子类型
    • 获取DSL语句
    • 执行DSL语句
    • 执行SQL语句
    • 自定义RequestOptions
    • 自定义default方法
  • 高阶语法

    • 查询字段过滤
    • 排序
    • 聚合查询
    • 分词&模糊匹配
    • 权重
    • 高亮查询
    • GEO地理位置查询
    • IP查询
  • 插件

    • 插件
    • 领域模型生成插件
  • 其它

    • 问答
    • 与MP差异
    • MySQL和EE语法对比
    • 更新日志
    • 更新计划
    • 版权
    • 鸣谢
  • v2.x文档
  • 核心功能
  • 数据CRUD
老汉
2023-03-18
目录

数据同步方案

# 背景

有不少小伙伴在社区答疑群问我怎么把数据从MySQL同步到ES?想回答好这个问题,需要结合具体的业务场景和数据量以 及具体的开发人数,不同的情况有不同的方案, 就像做菜撒盐一样,我没法直接回答你们,我只能给出一些可行性的方案, 用户可结合自己公司情况,综合考虑.

# 全量同步

顾名思义,就是把现有数据库中的数据全部同步到ES中,通常用是在首次接入ES时,需要初始化全量数据.全量同步可以 考虑 ES官方的Logstash,以及阿里开源的DataX,当然如果你数据量少于千万级别,且数据本身也比较小,想图个简单 省事,使用Easy-Es提供的insertBatch(Collection data)方法批量插入也未尝不可.

# 增量同步

当数据全量同步完成后,用户开始使用ES,此后伴随这数据的CRUD,我们需要把这些数据的变化同步到ES,以确保ES中 的数据实效性,谓之增量同步. 比较成熟的解决方案有阿里开源的Canal,当然你也可以用MQ,甚至本地消息事件(例如 Guava的Event-Bus,springboot自带的Event),根据你的业务数量以及部署机器是否分布式环境等综合考虑选择 适合的方案,上述解决方案原理都类似,基本上都是有MySQL数据变更(增/删/改)时发布消息,然后订阅方订阅到该消 息事件后,将数据变更同步至ES,如此便可以解耦.如果你们并发不算太高,数据量变动也不大的话,用Easy-Es提供的 批量CRUD方法也可以,你可以从MP查出来变更的数据让后调用下方的API完成数据变更,下面API和MP一致,不再介绍.

Integer updateBatchByIds(Collection<T> entityList);
Integer deleteBatchIds(Collection<? extends Serializable> idList);
Integer insertBatch(Collection<T> entityList);
Integer delete(Wrapper<T> wrapper);
1
2
3
4

提示

在正式同步前,请务必先规划和设计好你的索引结构,分片及副本等索引信息, 由于ES索引发生改变后就得重建索引, 重迁数据,耗时耗力,所以千万不要操之过急,否则你可能一夜回到解放前!

另外上述方案都是一些参考方案,如果你们有找到更好的解决方案也欢迎尝试,而且我这里并不会介绍每种方案具体的 实现,都是成熟的开源组件,大家不会请问度娘或者ChatGPT.

帮助我们改善此文档 (opens new window)
上次更新: 2025/05/11
索引CRUD
数据CRUD

← 索引CRUD 数据CRUD→

Theme by Vdoing | Copyright © 2021-2025 老汉 | 浙ICP备2022020479号 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式