如何区分使用 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_event
和 sym_outgoing_batch
行。以上是关于如何区分使用 SymmetricDS 通过 FTP 传输的 CSV 中的更改数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 Symmetricds 时出现 Firebird 错误
Spring Boot 应用程序中的 SymmetricDS