ES迁移到TiDB总结

本文总结了将ES数据迁移到TiDB的过程,包括迁移前的准备工作,如字段长度调整、字段统计分析和迁移影响评估。在程序设计方面,强调了数据准确性、总量核对、增量处理、断点续传、唯一性保证、任务管控和异常处理。同时,提到了迁移过程中的速率控制、资源管理和错误处理策略,以及对ES和TiDB的注意事项,如防止内存泄露和优化插入性能。

        ES迁移到同构库可以直接用ES的集群迁移工具,但是异构库就不能直接用现有的工具了;
参考ES reindex工具的底层实现api,我们选择用ScroolApi来通过程序迁移;

迁移之前需要准备

  1. es表所有字段的长度的最大值,因为历史数据跨度5年,且是非结果化数据,所有长度没有固定长度,tidb的所有字段需要设置成最大值,或者按照业务允许的原则截取存储
  2. es因为是非结构化数据,历史数据可能的字段个数和名字都有不一样的,这种需要提前统计分析出来
  3. 评估迁移数量数量,以此评估目标数据库需要准备的磁盘空间大小及目标库的存储方案
  4. 评估迁移周期
  5. 评估迁移数据任务是否影响目标库的生产业务开展

迁移程序设计

  1. 数据准确性:迁移的数据字段数量,内容要保证准确性
    1. 有核对准确性的方案
  2. 数据的总量正确:迁移总的数据量要能核对上
    1. 需要考虑迁移过程中增量数据怎么办?
    2. 迁移过程中如果失败了是不是可以断点续传接着失败前的任务继续
      1. 程序可以自己恢复的重试
      2. 需要修复程序再重试
    3. 数据唯一性保证,不能有重复数据,因此需要唯一键保证
  3. 迁移的过程中任务的管控
    1. 启动新任务
    2. 暂停任务
    3. 恢复暂停的任务
    4. 一键暂停所有任务
    5. 任务终结后资源可以自动释放回收
  4. 可靠性及安全保障
    1. 指定时间段,可以配置指定速率,保证业务不受影响,且速率可以人工干预
    2. 兜底限速,整个迁移任务不超过某一个速率,对数据库做过载保护,且可以人工调整
  5. 迁移日志打印
    1. 迁移启动时间
    2. 迁移已经运行时长
    3. 已经迁移的总量
    4. 还剩多少量
    5. 还剩多少量
    6. 当前滑动窗口速率
    7. 预估还剩多久能迁完
    8. 迁移过程中当前已经迁移的数据id和时间(重试任务的起点配置)
    9. 任务的类型
    10. 任务的索引名
  6. 容错保证
    1. 迁移过程中,出现数据库超时异常、其余程序异常等可以自动暂停指定时候后自动重试
    2. 迁移过程中插入失败的数据放到错误信息表,可以通过专门的错误数据补录程序补
  7. 迁移程序应用容量
    1. 内存
    2. CPU
  8. 迁移程序的监控,当发现异常情况
    1. 自动暂停迁移任务?
    2. 快速人工干预任务?
  9. 程序性能
    1. 并行能力
    2. 并发能力

ES 相关注意事项

  1. scrollapi 一定要设置context的过期时间,避免内存泄露
  2. scrollapi 一定要调用次数要限制,避免oom
  3. scrollapi 如果查询一次超时,再次查询会跳过超时的一页数据,导致数据缺页
  4. 最好按照创建时间排序后用scrollapi一页一页的查询,如果有自增长的字段也可以用它排序
  5. es查询快

TIDB相关注意事项

  1. tidb单条插入慢吗,但是支持高并发
  2. tidb的时间可能不能存储毫秒值,这个需要找tidb数据库人员来确认配置,然后调整
  3. tidb数据库性能的监控
    1. ioutil
    2. io等待时间
    3. cup
    4. raft cup
    5. tso超时时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值