互联网项目的用户使用量通常比较大,如果系统设计的不好,考虑的不周全,很容易出现各种故障,随之也有很多的错误数据产生。下面列举一些处理线上数据的方法。
编写细粒度接口,修复数据
如果需要修复的数据的量不大,例如几百条,那么可以编写一些细粒度的接口,比如说,你需要更新某些订单数据的状态,那么你可以编写类似下面的方法。
public void updateOrderStatus(Long orderId,String orderStatus){
orderRepository.updateOrderStatus(orderId,orderStatus);
}
然后每条慢慢修复。当然你用批量的方式也可以,但是要注意事务问题和如何跟踪哪条数据更新失败了。
使用批量的处理方式
如果数据量很大,例如12万条,那么只能使用批量的方式。这种情况下,最好是在夜深人静,系统访问量不大的时候执行,不然可能影响系统的响应速度的。
备注:
使用批量方式,如果数据更新出错或者插入失败,则应该事先编写细粒度接口,可以单独更新或者插入某条数据。这个很重要。
准备sql,让dba帮忙
当然如果可能的话,也可以让dba帮忙执行sql,修复线上数据
总结
1、修复线上错误数据是个苦差事,本来就是坑,如果你修复不当,就是另一个大坑;
2、整理数据需要细心仔细有耐心;
3、可能还需要编写一些小工具,帮助处理从数据库中查询出来的数据;
4、一定要有细粒度程序接口,否则无法针对单条数据进行修复;
5、在线上数据库进行sql查询时,不要动不动就整个表count(*),表数据量大,很容易拖垮数据库的。线上数据库执行sql,必须小心小心又小心。尽量多用limit关键字。