MongoDB/SQL Server增量同步方案增量同步方案
由于SQL Server的特殊性,目前市面上没有成熟开源的SQL Server/MongoDB同步软件,可行方案需要采用软件编写的
方式才能实现该功能。通过调研,总结3种可行方法。依据采用的原理不同分为如下方法:依据时间戳更新数据、通过触发器
更新数据以及SQL Server特有的CDC(change data capture)机制更新数据。本文针对公司的数据库同步需求,首先介绍3种方
法的优缺点,然后提出其中可行的解决方案。
1、方法比较
· 时间戳
参考数据库表中的更新时间字段,依据此字段判断是否需要更新到MongoDB。优点是对原数据库改动较小。但缺点是原
平台数据库大部分表没有记录更新时间的字段。实现的难度有原有系统不是每个表都有更新时间字段,如果没有更新时间字段
需要重新设计表添加该字段。
· 触发器
创建数据库触发器,将更新数据存放到临时表,MongoDB读取临时表。优点是能高度自定义更新条件以及更新字段。缺
点是开销大,过多触发器设计、创建、更新、管理的工作。需要进行大量的设计与管理工作,开销较大。
· 触发器
数据库服务器开启CDC功能,MongoDB端只需从cdc相关表中获取更新数据。对原数据库改动小,只需开启功能。但
SQL Server自有的功能,安装以及开源工具太少。该功能开源工具较少,只能通过编写查询语句获得更新数据,以及已更新
数据的处理。
如上述比较可见,CDC方法为工作量相对较小的方法,下面简单介绍该方法的处理流程。
2、CDC处理流程
如流程图可见,CDC的大部分的数据更新比较在SQL Server内部处理完成。MongoDB(Data warehouse端)只需获得更新
数据,其中数据的提取、转换通过Nodejs脚本来完成。 下面以alarmos数据库的aaaaaabbbbbb表为例,描述CDC的处理流
程。
· 开启CDC功能
CDC的功能开启在SQL Server端执行T-SQL语句。
USE alarmos
GO
EXEC sys.sp_cdc_enable_db
GO
执行成功后会在系统表内出现3个与cdc相关的表(schema为cdc)。
· 追踪表的配置
这一步开启针对表的更新追踪功能。
USE alarmos
评论0