快速,持续,稳定,傻瓜式
支持Mysql,Sqlserver数据同步

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

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

此实验的主要思想是在创建数据库表时

通过添加一个附加字段(即时间戳字段)

例如,当同步表tt1和表tt2时,

通过检查该表是否为最新更新,将该表用作新表,另一个表为由新表中的数据更新的最旧表。

实验数据如下:

mysql数据库5.1

test.tt1(id int主键,名称varchar(50));

mysql.tt2(id int主键,名称varchar(50));

快照表,可以将其存储在测试数据库中,

另外,为简单起见,您可以将其创建为临时表类型。

数据显示在水壶1中

水壶1

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

主要过程显示在水壶2中

\水壶2

在准备中,将时间戳字段添加到tt1和tt2表中,

由于tt1和tt2所在的数据库不同,因此请在两个数据库之间创建连接。

准备

水壶3

\执行此作业后,查询数据库时将看到以下字段:

\

水壶4

然后,让我们在tt1表上执行插入操作和更新操作

水壶5

无论是对原始表的插入操作还是更新操作,相应的updateTime都会更改。

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

以下是与main_thread对应的屏幕截图:

水壶6

在这里介绍Main的级别:

主要

开始

Main.prepare

Main.main_thread

{

开始

main_thread.create_tempTable

main_thread.insert_tempTable

main_thread.tt1_tt2_syn

成功

}

Main.finish

成功

main_thread中的过程如下:

作为一个整体,使它每200s循环一次,

在这种情况下,如果存在与更新或插入对应的指定表tt1或tt2,

该表中的updateTime字段将被捕获并同步。

如果没有更新,则交换机的默认路由将对应于写入日志。

继续循环。

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

然后,通过转换来确定该表的最新updateTime值,

选择是否更新与tt1表对应的tt2或tt2表;

main_thread.create_tempTable.JOB:

main_thread.insert_tempTable.Job:

PS:对于第二个SQL,应该对其进行更改(如果不对其进行修改,那将是错误的)

set @ var1 =(从tt2中选择MAX(更新时间));

插入test.temp值(2,@ var1);

因为conn对应于连接到mysql(数据库实例名称),

但是我们将快照表和tt1表都保存在测试中(数据库实例名称)。

上图中的相应语句是要实现的,在temp表中插入两行记录元组。

与id为1的元组相对应的temp.lastTime字段是从tt1表中选择的最新updateTime值,

与id为2的元组相对应的temp.lastTime字段是最新字段,其最新时间是从tt2表中选择的。

当然,id用作后续开关操作的参考,并用于指示最新的updateTime来自tt1还是tt2,

您还可以使用tableName varchar(50)字段来存储与最新updateTime相对应的数据库。数据表的名称也是可以接受的。

main_thread.tt1_tt2_syn.Transformation:

首先,创建与测试数据库的临时表的连接,

在临时表中选择具有最新lastTime值的记录

相应的ID号。

首先以降序对temp中的lastTime字段进行排序,

然后选择id并将选择记录限制为仅一行。

然后根据id的值选择开关。

LZ想要在这里使用它,SQL Executor,

但是它不能返回相应的id值。

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

并由开关接收。

下图对应于开关id = 1:tt1更新tt2

注意选择比较合并行的新数据源和旧数据源

在”插入/更新”中选择目标表

下图是开关id = 2时的情况:tt2更新tt1

注意选择比较合并行的新数据源和旧数据源

在”插入/更新”中选择目标表。

但是考虑到添加一列会浪费很多空间,

因此,完成同步后,请使用完成操作步骤删除updateTime字段。

这对应于Main中的准备操作。

Main.finish

在这种情况下,已经建立了实验环境,

接下来,对实验数据进行测试并将其写入下一个博客。

\当然,触发器也是同步的好方法,将其写在后续博客中

与触发器相比,时间戳方法更简单,更通用,

但是,数据库表中的timestamp字段非常占用空间,无法删除,

即删除表中的一行记录,该表应用作新表来更新表的其余部分,但是由于记录删除时间戳没有依赖性,因此无法记录。

相关推荐

咨询软件
 
QQ在线咨询
售前咨询热线
QQ1922638