环境信息
canal version 1.1.3-alpha-2 mysql version 5.6
问题描述
使用Canal-Adapter进行存量数据同步,目前库表最大的表有8kw数据,利用目前ELT功能进行数据同步,速度非常慢
阅读了源码发现,性能卡在数据同步的时候,反查Es是否重复上(考虑新索引的情况下,不会出现重复) 这边为了提高同步速度,写了2个ELT新的接口
1、适用表数据不超过500w,底层通过多线程进行数据分页查询,每个任务1w条数据库查询+插入es。同时提供isNeedDelete参数控制是否需要反查数据库
http://127.0.0.1:8081/etlEx/rdb/oracle1/mytest_user.yml?sql=select%20id,name,age%20from%20user&isNeedDelete=false -X POST
内部sql会是
select id,name,age from user limit 0,10000; select id,name,age from user limit 10000,10000; .....
2、适用表数据超过500w,底层通过单线程分页查询(分页通过> {orderByParam} 进行快速分页),每次任务1w条数据库查询+多线程插入Es。同时提供isNeedDelete参数控制是否需要反查数据库
http://127.0.0.1:8081/etlEx/rdb/oracle1/mytest_user.yml?sql=select%20id,name,age%20from%20user&isNeedDelete=false&orderBy=id -X POST
内部sql会是
select id,name,age from user limit 0,10000; select id,name,age from user where id>10000 limit 0,10000; .....
原提问者GitHub用户house0128
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
如果是大于1w条的数据,默认会自动分成3个线程同时导入。 如果是配置_id为主键的索引ETL时是不会查重的,导入慢你可以把提交批次调commitBatch调整大些
原回答者GitHub用户rewerma