UTS 数据库同步原理

一、UTS服务简介

UTS时间戳服务器是一款基于国家标准时间源,利用PKI、数字签名技术来检测完善数据库同步行为时间可信性的安全产品,广泛应用于“互联网+金融”领域。

时间戳(timestamp)是SqlServer特有的一个字段类型,当表的行数据新增或修改后,该字段会自动更新为最新的数值。

SqlServer的timestamp存储的其实是一个int64,并不是时间或者日期类型(比如mysql的timestamp)。

凡是数据新增和修改操作能引起数值变大的字段,我们都可以称之为时间戳字段,包括bigint,number,datetime,binary(8)等。

二、工作原理

我们通过比对源和目标表中,所有时间戳字段的差异,就可以判断出源头发生了何种数据操作(DML)。从而通过UTS时间戳机制自动进行数据库同步完善工作。

例如:我们现在有一个源表:

主键 name(varchar(20))

时间戳(bigint)

Hello

1001

World

1003

①源表数据库同步之后,得到目标表一:

主键 name(varchar(20))

时间戳(bigint)

Hello

1001

对比目标表一和源表,发现缺少时间戳1003的记录,说明源表发生了insert新增操作(也有可能是目标误删除了记录);

②源表数据库同步之后,得到目标表二:

主键 name(varchar(20))

时间戳(bigint)

Hello

1001

World

1002

对比目标表一和源表,目标表二多了一条时间戳1002的数据,但少了一条1003的数据,两者主键一致,说明源表发生了update更新操作;

③源表数据库同步之后,得到目标表三:

主键 name(varchar(20))

时间戳(bigint)

Hello

1001

World

1003

Test

1004

对比目标表一和源表,目标表三比源表多了一条时间戳为1004的数据,说明源头发生了delete删除操作。

……

以上种种情形,我们通过时间戳服务,对比源表和目标表时间戳序列的差异,随时发现数据DML操作,不需要额外的日志系统辅助,自动智能解决一切传输问题,传给目标表精确的数据库。

我们知道时间戳字段应当满足如下特性:

①时间戳字段的值必须是正数,且像时间一样正向增长的,不能回退;

②同一张表中时间戳字段的值尽可能的是唯一的;

③数据发生插入或更新时,该条记录的时间戳字段的值尽可能成为全表最大。

MSSQL数据的timestamp类型就具有这种特性,能够很好的支持UTS的数据传输同步。对于数据源不是MSSQL数据库的,尽可能使用某种机制确保作为时间戳字段的值满足上述特性。(如触发器的实现方式)

下图是MSSQL的一张表,开始时只有3条数据。

当插入一条记录后,插入的这条记录的时间戳字段的值就成为全表最大的值了,这样通过目标表比对最大,最小时间戳和数据总数,很快就能够知道新增的记录数是id为4的数据。

当数据源发生更新后,更新ID为1的数据,这时这条记录的时间戳由原来的全表最小变成了全表最大,通过比对目标表和源表的最大最小值,很容易就找出ID为1的记录发生了更新,uts就能够将更新的数据同步到目标表。

三、产品优势

相比较传统有逻辑缺陷的日志体系,时间戳机制“冗灾容错”,绝对不会丢失数据。

传统日志体系(缺点)

时间戳机制(优势)

当网络故障、数据库异常或者某种写入失败出现后,日志系统将面临丢失数据风险,还有其他层出不穷的异常。

时间戳机制通过比对源和目标的时间戳序列差异,随时可以发现数据DML操作,不需要额外的日志系统辅助,智能自动解决一切传输问题。

当目标表发生误操作,比如删除了数据,日志体系很难补齐缺失的数据。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值