我目前正在开发从数据库读取器到数据库写入器的通道。源连接器和目标连接器都在 SQL Server 上运行。
问题是通过将源中的Interval设置为5毫秒,通道每5毫秒轮询和写入数据,即使之前已经轮询或写入数据。
例如,如果源数据库中只有一行,则通道将无限地每隔 5 毫秒将一行插入目标数据库。这会导致目标数据库中出现无限重复行。
有没有办法避免这种情况,只有在轮询的数据是新的时才插入目的地?
我目前正在开发从数据库读取器到数据库写入器的通道。源连接器和目标连接器都在 SQL Server 上运行。
问题是通过将源中的Interval设置为5毫秒,通道每5毫秒轮询和写入数据,即使之前已经轮询或写入数据。
例如,如果源数据库中只有一行,则通道将无限地每隔 5 毫秒将一行插入目标数据库。这会导致目标数据库中出现无限重复行。
有没有办法避免这种情况,只有在轮询的数据是新的时才插入目的地?
你没有发布你的频道,所以我不知道你的查询是什么样的。此外,您没有发布 db 架构。一般来说,您需要做的是实施一种方法来跟踪已处理的记录。一种方法是在插入新记录时向相关表中添加一个默认值为“NEW”的列。当您处理完它们(例如,从一个数据库复制到另一个数据库)后,您可以通过更新语句将状态设置为“已复制”。可选地,您还可以有一个带有时间戳的列,该时间戳指示记录的复制时间。另一种(可能更好)的方法是在一个单独的表中执行此操作,该表跟踪数据库中的所有突变。这使您可以更灵活地记录哪些事件。
我能想到的两种方法:
通常的方法是在您正在读取的数据库的表中设置一个标志,一旦从该表中读取数据,您将使用"Read"
or更新表"Processed"
。然后您将根据该标志编写一个获取查询,因此只有在标志不等于时才会插入数据"Read"/"Processed"
如果更改数据库不在您手中,您可以在 中编写查询以获取这样的数据"SELECT * FROM Table ORDER BY ID DESC LIMIT 1"
。ID 是您的主要身份。