中间表同步方案(全量,增量)

来源:互联网 发布:网络架构师工作时间 编辑:程序博客网 时间:2024/05/01 22:37
最近做一个大数据量统计分析系统,以前已经做了一个大的描述
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'

--建临时中间表,方便同步(字段内容与真实表一样)
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)

。。下面就可以做同步数据了,
。。。同步数据是从原业务表里取,不过,数据范围限定在,增量表里的没有做增量操作(并且操作类型为新加与修改的)的数据

也就同步多加一个WHERE条件,
WHERE LOG_MANUAL_INC.ARJ_MARK='M' and SUBSTRING(USING_FLAG,2,1)<>1
取好的数据是放在新建的临时中间表,#TG_ENTRY

做好了同步操作,不要忘了更新增量表的标志。
 
原创粉丝点击