中间表同步方案(全量,增量)
最近做一个大数据量统计分析系统,以前已经做了一个大的描述
http://www.cnblogs.com/edobnet/archive/2005/04/24/144521.html
http://edobnet.cnblogs.com/archive/2005/11/11/273947.html
为了提高性能,对于中间表,的同步,采用初台全量同步,每天,增量同步的方案。
我介绍一下我们增量方案吧!
要增量,增量日志表是必需的,增量日志表的设计。
KEY(原业务表关键字),CREATE_DATE(变更时间),FLAG(数据修改与删除标志),USE_FLAG(增量表是否被使用的记录,(一个存储过滤使用一位))
每天增量同步时,做如下操作
。。下面就可以做同步数据了,
。。。同步数据是从原业务表里取,不过,数据范围限定在,增量表里的没有做增量操作(并且操作类型为新加与修改的)的数据
也就同步多加一个WHERE条件,
WHERE LOG_MANUAL_INC.ARJ_MARK='M' and SUBSTRING(USING_FLAG,2,1)<>1
取好的数据是放在新建的临时中间表,#TG_ENTRY
做好了同步操作,不要忘了更新增量表的标志。
http://www.cnblogs.com/edobnet/archive/2005/04/24/144521.html
http://edobnet.cnblogs.com/archive/2005/11/11/273947.html
为了提高性能,对于中间表,的同步,采用初台全量同步,每天,增量同步的方案。
我介绍一下我们增量方案吧!
要增量,增量日志表是必需的,增量日志表的设计。
KEY(原业务表关键字),CREATE_DATE(变更时间),FLAG(数据修改与删除标志),USE_FLAG(增量表是否被使用的记录,(一个存储过滤使用一位))
每天增量同步时,做如下操作
--如果增量日志表,所有标志位都已经使用,把增量日志表移到增量日志备份表里
INSERT LOG_MANUAL_INC_BAK
SELECT *
FROM LOG_MANUAL_INC
WHERE LEFT(USING_FLAG,4)='1111'
DELETE LOG_MANUAL_INC WHERE LEFT(USING_FLAG,4)='1111'
INSERT LOG_MANUAL_INC_BAK
SELECT *
FROM LOG_MANUAL_INC
WHERE LEFT(USING_FLAG,4)='1111'
DELETE LOG_MANUAL_INC WHERE LEFT(USING_FLAG,4)='1111'
--建临时中间表,方便同步(字段内容与真实表一样)
CREATE TABLE #TG_ENTRY (
[TE_ENTRY_ID] [char] (18) NOT NULL
..
)
GO
CREATE TABLE #TG_ENTRY (
[TE_ENTRY_ID] [char] (18) NOT NULL
..
)
GO
---------------------将未整合记录从中间表中删除
--SUBSTRING(USING_FLAG,2,1)为这次整合使用的标记位
DELETE FROM TG_ENTRY WHERE TG_ENTRY_ID IN (SELECT TG_ENTRY_ID FROM LOG_MANUAL_INC WHERE SUBSTRING(USING_FLAG,2,1)<>1)
--SUBSTRING(USING_FLAG,2,1)为这次整合使用的标记位
DELETE FROM TG_ENTRY WHERE TG_ENTRY_ID IN (SELECT TG_ENTRY_ID FROM LOG_MANUAL_INC WHERE SUBSTRING(USING_FLAG,2,1)<>1)
。。下面就可以做同步数据了,
。。。同步数据是从原业务表里取,不过,数据范围限定在,增量表里的没有做增量操作(并且操作类型为新加与修改的)的数据
也就同步多加一个WHERE条件,
WHERE LOG_MANUAL_INC.ARJ_MARK='M' and SUBSTRING(USING_FLAG,2,1)<>1
取好的数据是放在新建的临时中间表,#TG_ENTRY
做好了同步操作,不要忘了更新增量表的标志。