ES迁移到同构库可以直接用ES的集群迁移工具,但是异构库就不能直接用现有的工具了;
参考ES reindex工具的底层实现api,我们选择用ScroolApi来通过程序迁移;
迁移之前需要准备
- es表所有字段的长度的最大值,因为历史数据跨度5年,且是非结果化数据,所有长度没有固定长度,tidb的所有字段需要设置成最大值,或者按照业务允许的原则截取存储
- es因为是非结构化数据,历史数据可能的字段个数和名字都有不一样的,这种需要提前统计分析出来
- 评估迁移数量数量,以此评估目标数据库需要准备的磁盘空间大小及目标库的存储方案
- 评估迁移周期
- 评估迁移数据任务是否影响目标库的生产业务开展
迁移程序设计
- 数据准确性:迁移的数据字段数量,内容要保证准确性
- 有核对准确性的方案
- 数据的总量正确:迁移总的数据量要能核对上
- 需要考虑迁移过程中增量数据怎么办?
- 迁移过程中如果失败了是不是可以断点续传接着失败前的任务继续
- 程序可以自己恢复的重试
- 需要修复程序再重试
- 数据唯一性保证,不能有重复数据,因此需要唯一键保证
- 迁移的过程中任务的管控
- 启动新任务
- 暂停任务
- 恢复暂停的任务
- 一键暂停所有任务
- 任务终结后资源可以自动释放回收
- 可靠性及安全保障
- 指定时间段,可以配置指定速率,保证业务不受影响,且速率可以人工干预
- 兜底限速,整个迁移任务不超过某一个速率,对数据库做过载保护,且可以人工调整
- 迁移日志打印
- 迁移启动时间
- 迁移已经运行时长
- 已经迁移的总量
- 还剩多少量
- 还剩多少量
- 当前滑动窗口速率
- 预估还剩多久能迁完
- 迁移过程中当前已经迁移的数据id和时间(重试任务的起点配置)
- 任务的类型
- 任务的索引名
- 容错保证
- 迁移过程中,出现数据库超时异常、其余程序异常等可以自动暂停指定时候后自动重试
- 迁移过程中插入失败的数据放到错误信息表,可以通过专门的错误数据补录程序补
- 迁移程序应用容量
- 内存
- CPU
- 迁移程序的监控,当发现异常情况
- 自动暂停迁移任务?
- 快速人工干预任务?
- 程序性能
- 并行能力
- 并发能力
ES 相关注意事项
- scrollapi 一定要设置context的过期时间,避免内存泄露
- scrollapi 一定要调用次数要限制,避免oom
- scrollapi 如果查询一次超时,再次查询会跳过超时的一页数据,导致数据缺页
- 最好按照创建时间排序后用scrollapi一页一页的查询,如果有自增长的字段也可以用它排序
- es查询快
TIDB相关注意事项
- tidb单条插入慢吗,但是支持高并发
- tidb的时间可能不能存储毫秒值,这个需要找tidb数据库人员来确认配置,然后调整
- tidb数据库性能的监控
- ioutil
- io等待时间
- cup
- raft cup
- tso超时时间
本文总结了将ES数据迁移到TiDB的过程,包括迁移前的准备工作,如字段长度调整、字段统计分析和迁移影响评估。在程序设计方面,强调了数据准确性、总量核对、增量处理、断点续传、唯一性保证、任务管控和异常处理。同时,提到了迁移过程中的速率控制、资源管理和错误处理策略,以及对ES和TiDB的注意事项,如防止内存泄露和优化插入性能。
8195

被折叠的 条评论
为什么被折叠?



