数据迁移思路
项目中会有不少数据迁移的需求,例如内外网各有一个数据库,内网数据库为业务运营的生成数据库,外网数据库为对公众公开的数据,需要把内网数据库的数据迁移到外网数据库,而且并不是一次迁移完就完事的,要求内网有新数据就需要把数据迁移到外网数据库。诸如此类的例子还有很多,本文就该种数据迁移做一次头脑风暴,看看到底有多少种方式可以实现。
方式一:
最简单的方式就是在源表中添加传输状态的标识字段,例如添加transflag字段,值为0时为未传输状态,从源表中查找未传输的行,进行传输,传输后将transflag字段值为1.
方式二:
如果源表有自增序列,按顺序进行传输数据,例如从第一条开始一次取数据100条,传输这100条到目标数据库,然后记录本次最大的序列号100,下次取数据时从101(100+1)条开始取100条,如果本次取的的数据不足100条,例如只有50条,那就传输这50条数据,并记录本次最大的序列号150,作为下次取数据的依据。
方式三:
以包的方式进行传输,在源数据表中增加字段记录包号,将数据以某种方式打包形成包号(例如可以用时间、数量等),以包号取的数据,并将数据传输到目的表中,然后记录该包的传输状态。
方式四:
如果源表字段确定不能动,还有一种方式是新建一张表记录源表中数据的传输状态,要求源表必须有主键,并且新表以源表的主键为主键,然后两个表进行关联,将未传输的数据进行传输,并将传输状态插入到新表中。这种方式适用于数据量比较少的传输中,不然两个表关联查询效率会越来越低。
方式五:
。。。。。
传输方式还有很多种,暂时想到的这几种,希望大家集思广益,看看还有没有其他的思路。