本文主要是介绍数据库归档策略,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
数据库迁移策略
为备战双11,需要将数据库中的相关表(历史订单)进行归档,以便腾出更多的空间迎接订单的暴增。作者经过尝试,得出自认为最优的解决方案。下面给出数据库归档策略及示例代码。
现有条件:
1.现有两个数据库:db-A 以及 db-B;
2.两个库中有字段相同的表:tba(表中只有字段订单id–rx_id(long型) 有索引);
3.归档库的tba中还有17年整年的归档数据。
4.由于单量隐藏性,rx_id 并不是按照下单时间依次递增的,但是大致趋势是递增的。即:保证今天的最大单号比昨天的最大单号的值大。
5.需要迁移的单量大约300w条。
我们注意到,
1.数据量庞大,在查询的sql中最好是能够利用索引。
2.数据库可利用的索引只有1个。
解决思路:
1.首先,作者通过拿到当归档库表中最大的订单号:rx_id_start。
2.其次,拿到结束时间当天最大的订单号:rx_id_end。
3.通过两个单号,分页查询两个订单号范围内的订单。
4.按分页的数量分批插入归档表。
5.做一个定时job 定时执行。
好处:
1.最大化并且巧妙的利用了索引,加大了检索速度。
2.可做成定时job每天,执行一次,归档的工作可持续。
完整代码:
private static String archive4RxInfoJob = "archive4RxInfoJob";/*** 缓存结束时间的最大rxId*/
public
这篇关于数据库归档策略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!