需求:
问题描述
数据库MySQL,引擎innodb,当前表1数据接近2000万条
需要写定时任务,每天运行一次,也可以运行多次,将表1中最远一天的数据迁移至另外的表2
大概每天产生的数据有将近10万条
总结下来:每天需要从表1中删除将近10万条数据,然后把这10万条数据插入到表2,并且要保证从表1中删除和向表2中插入是原子的,不能出现表1中删除成功,但是表2中插入失败,或者表1中删除失败,但是表2中插入成功
哪位老哥有好的主意,望指点一下小弟,太迷茫了~
想到的解决方法
由于项目是golang写的,用的xorm框架,我目前想到的方法是:
1,select id from t2 order by id desc limit 1,获取到表2中最新的数据的主键id,保存为max_id
2,select * from t1 where id > max_id order by id asc limit 1000,从表1中查询到最远的1000条数据,保存在slice中。由于是使用的xorm框架,所以直接在方法中传入一个slice,slice中保存这1000条数据。
3,开启事务,遍历slice,读取id,根据id从表1中删除,并在表2插入
这么做有什么风险吗?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…