《大数据量跨系统人员信息同步比较高效方案》By landray LD 2011-09-01
背景:
1、 用户有近3w的用户信息在其他系统中需要同步到ad目录中去
2、 原系统没有提供修改时间,只能提供即时的全人员信息表
思路:
1、 我们需要每次都比较3w用户的变更情况,得出1张变化差异表
2、 根据差异表修改ad目录
方案(只介绍比较用户得到差异表):
1、 建立中间表、临时表、历史表和差异表
2、 取信息表到中间临时表,另外再增加2列,1列是整合人员的唯一编号,2列是加总所有的需要变更的信息的列
3、 临时表与历史表分别进行新增、删除、变更的比较,产生的差异数据写入到差异表中
4、 同步成功后把临时表数据完全写入历史表,备下次进行比较
测试效果:
Ibm X61上win7 64位系统装sql server 2005,运行1.6w人员信息运行完成存储过程只需要几秒!
附录1:创建几个表的sql
drop table [dbo].[union_active_directory]
go
CREATE TABLE [dbo].[union_active_directory] (
[source] varchar(10) COLLATE Chinese_PRC_CI_AS NOT NULL,
[user_id] varchar(20) COLLATE Chinese_PRC_CI_AS NOT NULL,
[user_nm] varchar(40) COLLATE Chinese_PRC_CI_AS NOT NULL,
[area_id] varchar(20) COLLATE Chinese_PRC_CI_AS NULL,
[area_nm] varchar(250) COLLATE Chinese_PRC_CI_AS NULL,
[company_id] varchar(20) COLLATE Chinese_PRC_CI_AS NOT NULL,
[company_nm] varchar(100) COLLATE Chinese_PRC_CI_AS NOT NULL,
[postname] varchar(250) COLLATE Chinese_PRC_CI_AS NULL,
[brand] varchar(250) COLLATE Chinese_PRC_CI_AS NULL,
[mobile] varchar(40) COLLATE Chinese_PRC_CI_AS NULL,
[telephone] varchar(40) COLLATE Chinese_PRC_CI_AS NULL,
[email] varchar(100) COLLATE Chinese_PRC_CI_AS NULL,
[memo] varchar(250) COLLATE Chinese_PRC_CI_AS NULL,
[lastmodify] datetime NULL,
[mark] varchar(10) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_union_active_directory] PRIMARY KEY CLUSTERED ([source], [user_id], [company_id])
)
ON [PRIMARY]
go
drop table [dbo].[union_active_difference]
go
CREATE TABLE [dbo].[union_active_difference] (
[source] varchar(10) COLLATE Chinese_PRC_CI_AS NOT NULL,
[unique_id] varchar(40) COLLATE Chinese_PRC_CI_AS NOT NULL,
[user_nm] varchar(40) COLLATE Chinese_PRC_CI_AS NOT NULL,
[area_id] varchar(20) COLLATE Chinese_PRC_CI_AS NULL,
[area_nm] varchar(250) COLLATE Chinese_PRC_CI_AS NULL,
[company_unid] varchar(20) COLLATE Chinese_PRC_CI_AS NOT NULL,
[company_nm] varchar(100) COLLATE Chinese_PRC_CI_AS NOT NULL,
[postname] varchar(250) COLLATE Chinese_PRC_CI_AS N