如何区分使用 SymmetricDS 通过 FTP 传输的 CSV 中的更改数据

Posted

技术标签:

【中文标题】如何区分使用 SymmetricDS 通过 FTP 传输的 CSV 中的更改数据【英文标题】:How to distinguish changed data in CSV transferred over FTP using SymmetricDS 【发布时间】:2015-05-12 07:55:03 【问题描述】:

我正在尝试使用 SymmetricDS 将更改的数据传输到 FTP 服务器。而且,我能够成功转移它。因此生成的 CSV 文件包含更改的 ROW_DATA,即在“更新”事件的情况下,存在更新值的行,而对于“插入”事件,存在包含所有新值的行。 以下是我想知道的几点:-

    如何区分 'UPDATED' 行和 'INSERTED' 行 CSV 文件? 另外,对于“DELETE”事件,没有对应的行 在 CSV 文件中。那么,如何获取被删除的行呢?

谁能帮我解决这个问题。

【问题讨论】:

【参考方案1】:

    如果存在 OLD_DATA 行,则操作为 update,否则操作为 insert。不要忘记,即使 OLD_DATA 为空,如果已经存在具有相同主键的行,即在源节点上存在 insert,反之亦然,则在目标端 symmetricDs 可以回退到 update

    是否声明了 ON_DELETE 触发器?最简单的方法是检查数据库中定义的触发器列表,并找出是否存在 ON_DELETE。另一种方法是删除一行,提交,然后select * from sym_data order by data_id desc 验证删除数据已在delete 上捕获。

【讨论】:

您好鲍里斯,感谢您的回复。我同意你的上述观点。但是,我们需要在数据库中手动触发一个查询来推断这一点。但我的要求是通过 CSV 条目本身进行识别。那么,有没有一种方法可以配置 SymmetricDS 以在 CSV 文件中的每一行发送一个标志,我们可以在其中识别哪一个是“更新”或“插入”行?。 另外,对于“删除”事件,我能够执行数据的在线同步。我的意思是,如果我在源节点中删除一行,它也会在目标节点中被删除。我认为从中我可以推断出“ON_DELETE”触发器已声明并且工作正常。但是对于“删除”事件,我无法在 CSV 文件中看到任何行。那么有没有一种方法可以配置 SymmetricDS 以在 CSV 文件中发送“已删除”行,并带有一个将其指示为“已删除”行的标志? 从源发送到目标的CSV文件中必须有与DELETE事件相关的信息。查看sym_data 表,您会发现on_delete 触发器捕获的内容。然后路由此数据,并在每个同步的源中插入一对 sym_data_eventsym_outgoing_batch 行。

以上是关于如何区分使用 SymmetricDS 通过 FTP 传输的 CSV 中的更改数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 Symmetricds 时出现 Firebird 错误

SymmetricDS是如何工作的

Spring Boot 应用程序中的 SymmetricDS

如何修复 SymmetricDS 中的 unicode 数据错误

基于SymmetricDS的多主一从数据库同步方案

如何区分 MFC(VC++)中的文件夹类型(Windows/FTP)?