欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步_MySQL

程序员文章站 2022-06-03 10:59:07
...
bitsCN.com

这个实验主要思想是在创建数据库表的时候,

通过增加一个额外的字段,也就是时间戳字段,

例如在同步表 tt1 和表 tt2 的时候,

通过检查那个表是最新更新的,那个表就作为新表,而另外的表最为旧表被新表中的数据进行更新。

实验数据如下:

mysql database 5.1

test.tt1( id int primary key , name varchar(50) );

mysql.tt2( id int primary key, name varchar(50) );

快照表,可以将其存放在test数据库中,

同样可以为了简便,可以将其创建为temporary 表类型。

数据如图 kettle-1

kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步_MySQL

kettle-1

============================================================

主流程如图 kettle-2

kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步_MySQL

kettle-2

在prepare中,向 tt1,tt2 表中增加 时间戳字段,

由于tt1,tt2所在的数据库是不同的,所以分别创建两个数据库的连接。

prepare

kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步_MySQL

kettle-3

在执行这个job之后,就会在数据库查询的时候看到下面的字段:

kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步_MySQL

kettle-4

然后, 我们来对tt1表做一个 insert 操作 一个update操作吧~

kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步_MySQL

kettle-5

在原表上无论是insert操作还是update操作,对应的updateTime都会发生变更。

如果tt1 表 和 tt2 表中 updateTime 字段为最新时间的话,则说明该表是新表 。

下面只要是对应main_thread的截图:

kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步_MySQL

kettle-6

在main_thread中的过程是这样的:

首先创建一个快照表,然后将tt1,tt2表中的最大(最新)时间戳的值插入到快照表中。

然后,通过一个transformation来判断那个表的updateTime值最新,

来选择对应是 tt1表来更新 tt2 还是 tt2 表来更新 tt1 表;

main_thread.create_tempTable.JOB:

kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步_MySQL

main_thread.insert_tempTable.Job:

kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步_MySQL

main_thread.tt1_tt2_syn.Transformation:

kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步_MySQL

首先,创建连接 test 数据库的 temp 表的连接,

选择 temp表中 对应 lastTime 值最新的所在的记录

所对应的 id 号码。

首先将temp中 lastTime 字段进行 降序排列,

然后选择id , 并且将选择记录仅限定成一行。

kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步_MySQL

然后根据id的值进行 switch选择。

在这里LZ很想使用,SQL Executor,

但是它无法返回对应的id值。

但是表输入可以返回对应的id值,

并被switch接收到。

kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步_MySQL

kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步_MySQL

合并记录和同步记录的时候,两种情况是一样的。

这样的话,实验环境已经搭建好了,

接下来进行,实验的数据测试了,写到下一个博客中。

当然,触发器也是一种同步的好方法,写到后续博客中吧~

时间戳的方式相比于触发器,较为简单并且通用,

但是 数据库表中的时间戳字段,除了这个用途之外没有其他用途,

耗费了大量内存空间。

bitsCN.com
相关标签: 数据库表