数据库快速迁移10亿级数据
我们一直在追求架构的艺术!! 问题分析 经过几分钟的排查,数据库情况如下: 数据库采用Sqlserver 2008 R2,单表数据量21亿。 无水平或者垂直切分,但是采用了分区表。分区表策略是按时间降序分的区,将近30个分区。正因为分区表的原因,系统才保证了在性能不是太差的情况下坚持至今。 此表除聚集索引之外,无其他索引,无主键(主键其实是利用索引来快速查重的)。所以在频繁插入新数据的情况下,索引调整所耗费的性能比较低。 至于聚集索引和非聚集索引等知识,请各位移步google或者百度。 至于业务,不是太复杂。经过相关人员咨询,大约40%的请求为单条Insert,大约60%的请求为按class_id 和in_time(倒序)分页获取数据。Select请求全部命中聚集索引,所以性能非常高。这也是聚集索引之所以这样设计的目的。 解决问题 由于单表数据量已经超过21亿,并且2017年以前的数据几乎不影响业务,所以决定把2017年以前(不包括2017年)的数据迁移到新表,仅供以后特殊业务查询使用。经过查询大约有9亿数据量。 数据迁移工作包括三个个步骤: 从源数据表查询出要迁移的数据 把数据插入新表 把旧表的数据删除 传统做法 这里申明一点,就算是传统的做法也需要分页获取源数据,因为你的内存一次性装载不下9亿条数据。 从源数据表分页获取数据,具体分页条数,太少则查询原表太频繁,太多则查询太慢。