工作中经常会遇到因为数据量过大而带来的数据迁移与拆分,根据数据表中记录条数的不同,需要采取的策略也不尽相同。

数据量较小的表

例如:从数据库A中的tableA同步到到数据库B中的tableB

1、为了保证保证数据库A和数据库B中的表可以保持准确可用,通常会在数据库B中建立一张临时表temp。

2、将数据库A中的tableA表跟数据库B中的临时表比较,删除tableA中已经删除的数据,增加tableA中新增的数据,更新表中不同的数据。防止因数据库断开连接造成的问题。

3、待临时表更新完成,在同步到tableB中,保证tableB的准确性,同时因为临时表与tableB在同一数据库,可用SQL语句直接进行同步。

数据量较大的表

同步历史数据

数据量较少的表操作比较简单,对于千万级别的表的迁移与拆分来说,因为其数据量的庞大性,无法与小表采取相同的更新策略。但是数据保证其一致这一点是相同的。

例如:从数据库A中的tableA同步到到数据库B中的tableB

1、因为其数据量较大,所以我们需要记录那些数据被同步过,此时需要在数据库A中建立一张同步信息表,该表需要以下字段

OriginTable(原表表名)  PurposeTable(目的表表名)  CopyId(复制记录ID)  IsCopy(是否复制)  LastCopyTime(最新复制时间)  CopyCount(复制次数)

这样在从tableA中选择时,即可使用exists筛选未被复制的数据(前提是原表需要主键),从而实现可靠的复制。

2、在数据同步完成之后我们需要检查数据的准确性,即是否与原表数据一致。我们需要知道哪些数据已经被检查过,不能重复检查数据,此时需要在数据库B中建立一张复制信息表,该表需要以下字段

OriginTable(原表表名)  PurposeTable(目的表表名)  CheckId(检查记录ID)  IsCheck(是否检查)  LastCheckTime(最新检查时间)  CheckCount(检查次数)

这样可以保证从目的表选择时,可使用exists筛选未被检查的数据,从而不检查重复数据,还可设置检查次数,进行报警。