佬友们,目前是我有20w的数据需要进行merge into(若在就更新不在就插入)。我目前采取的方案是将这20w的数据按照1000进行划分。然后使用多线程进行这1000条的批量merge into。可还是很慢,佬友们,有什么优化的方案吗?
你应该先分布打下每一个环节的执行时间戳,判断下到底慢在哪里了?
就你发的内容看:
1、如何获取账号的“若在”?
2、merge into到哪里?数据库?还是什么其他的。。。。
试一下 数据清洗工具,如 Informatica,Kattle等,可以根据主键处理数据,千万数据在生产环境可以10分钟内处理完成。
1.在多线程内获取每次1000的从A库里取。2.就是批量执行merge into到B数据库的时候会慢,20w分批次1000累加起来就很慢。
好的,实在不行的话,引入一下kattle试试。
那就想办法加快入B库的速度,比如说建张新表,这样insert一定会快,然后再新表里去想办法merge一些旧表的字段达到目的;或者考虑是否可以异步,先入个队列然后慢慢消化去merge;再不行就得增加B库的配置了。任何工具都是辅助,思路永远都是你最好的工具,条条大路通罗马,别钻死胡同。
上面老哥说的对,可以尝试一些优化方法,临时表,异步流水线这些都可以试试,很多方案查一查,测试实践成功以后复用性会非常好
我觉得佬友说的第一个方法可行,我先insert到新表里面,然后再merge into这样同库执行一定快
好的,佬友
数据库性能瓶颈了吧…
你这个saveOrUpdate都慢…
1:能用主键的就用主键
2:看能不能区分出哪些数据是要insert,哪些数据要update(insert批量插入,update主键更新)
3:如果清洗这20W数据只是个临时操作,就用你现在的多线程分批去处理算了
4:如果是业务上每次都要处理20W数据,可以采用消息队列或者redis都行(就看对数据的及时性有没有要求了),把你的20W数据丢到队列里面去慢慢消费处理(用主键或者唯一索引去更新)
最后:
上次分页的问题解决了嘛
如果仅仅是 同步这种 不考虑代码方式实现可以试试 pt-archiver 这个归档工具 。不知道符合你的想法不。我当时用这个定时从 A库同步到B库
好的,佬友。上次分页的解决了使用的就是佬友们说的,先查500条下拉到底再查。