实现数据变化检测捕捉的4种方法

数据变化检测捕捉(CDC)意味着识别并跟踪数据库中发生的更改,以便可以采取措施,例如更新数据库或生成其他输出要素。这个想法是使用增量更新的方式来复制需要的数据,这样就不必在每次更新表时都复制整个数据库进行全量同步了。

例如,使用CDC工作流程维护数据库可以使您的团队执行分析并生成商业智能。对于出于不同目的数据维护的单独表示形式或子集,这可能是很有用的。假设您有一个内部地理数据库,该数据库会全天不断更新,并且希望通过公共网络地图共享它。在这里创建自动工作流以提取,处理和增量加载更改的要素,可以使Web地图保持最新状态,同时节省大量的计算时间和网络流量。

数据变化检测捕捉(CDC)有多种方法,最佳方法取决于您的源数据以及可用的信息和工具。让我们比较一些识别数据库变化的常见方法,以及如何在自动化环境中实现每个变化更新。我们将介绍的方法包括:

  1. 利用SQL ServerOracle其他系统提供的内置CDC工具或事务日志
  2. 每当数据更新时,使用触发器来触发更新行为
  3. 比较时间戳,以确定最近更新了哪些要素
  4. 将整个数据库或表与历史版本进行对比

一个HTML报告中列出了平面布置图数据集中发生了什么变化,并在地图上覆盖了新旧几何图形。在我们的检测网络研讨会上了解更多关于如何生成变化检测报告并将其自动发送给相关者。

另请参阅:该博客专注于检查变化的数据,若想获取检查变化的数据图层属性结构。可以在我们的Schema Drift网络研讨会上了解有关此内容的更多信息。

1.基于日志的CDC来利用内置的变化跟踪功能

许多系统具有用于跟踪变化的内置功能:Esri数据/软件(如Geodatabase和ArcGIS Portal)具有版本和归档功能,Smallworld具有替代功能,Oracle具有工作空间,其他维护事务日志或更改日志。如果您不害怕深入数据库核心,那么这是让数据库进行所有跟踪的逻辑方法,让您可以自由在CDC工作流程中利用这些结果。

您的工作流程应从日志表中提取最近的变化,首先过滤插入/更新/删除的内容,然后在目标系统中触发相应的行为-例如,将相应的插入/更新/删除应用于数据库或生成一个报告显示发生了什么变化。

该Web地图是基于变化跟踪工作流生成的,该工作流从SQL Server变更日志表收集增量变更,并将更新发送到ArcGIS Online。

如果您对使用更改日志使目标系统保持最新状态感兴趣,请观看“更新数据”网络研讨会的“基于日志的变化数据检测”部分,在此我们演示如何使用FME读取SQL Server事务日志。并更新ArcGIS Online网络地图。在FME中,可以使用Reader或SQLCreator转换器中的WHERE子句从日志表中获取最新变化。

特定于读者的变化检测”演示中还演示了在添加适用于GeodatabaseSmallworldOracle的Reader时如何利用内置功能。FME将在'fme_db_operation'属性中将要素标记为已插入/已更新/已删除,然后可以使用这些要素在目标系统中执行操作。要实现完全自动化,请在FME Server Automation运行工作流,以确保您的端点在源数据库更改时保持最新状态。

2.使用数据库触发器或Webhooks设置自己的变更日志

如果数据库没有变更日志或内置的变化跟踪工具怎么办?如果使用数据库,则可以创建变化检测表(即“影子表”)并设置触发器方便在发生任何更改时对其进行更新。该表将用于跟踪发生的每个变化。

设置完成后,您可以保留数据库以使其自动保持最新状态。然后创建一个工作流以连接到此影子表,进行过滤并照常执行操作。这种方法的缺点是多余的表使数据库混乱。如果不介意这种情况,那么它是使数据库完成变化更新工作的直接方法。

如果您不能或不想使用数据库触发器,webhooks可以做类似的事情。在FME Server中,设置带有webhook触发器的自动化,该触发器在发生任何情况时启动FME工作区。

在FME Server中创建的此自动化过程使用Webhook触发更改检测工作流。

要观看一个演示,在该演示中我们将构建一个自动化的FME工作流程来读取影子表并处理变更,请观看我们变更数据在线讲座中的“数据库触发器/ Webhooks ”。

3.使用时间戳字段

如果您想避免梳理数据库的事务日志或变更跟踪功能-或甚至没有这样做的选项-那么您可以使用表的一列字段或属性来记录变更的时间。

如果您要提取专门与日期范围相关的变更,例如逐年差异,这也可能是变更跟踪的理想方法。使用您的DBMS或FME,添加一个字段以记录每行上次修改的日期/时间。然后,通过过滤此属性并仅提取变更的行,在CDC工作流程中可以使用此字段。

该表包含一个LastUpdate(最后更新时间)列,该列指示每行的最后修改时间,并且可以在变更跟踪工作流中使用。

要利用FME中的时间戳字段,请使用Reader参数中的WHERE子句来仅读取在特定日期范围内最后修改的数据。在我们的变更数据网络研讨会的“修改时间戳记”部分中观看演示如何设置读模块参数和转换器的演示。

4.使用ChangeDetector转换器执行对比

将数据的当前状态与以前的状态进行对比是检查变更的最彻底,最精确的方法,并且在没有现有变化跟踪的情况下时是很有用的。对于那些无权访问更改日志,无权添加影子表或时间戳字段但仍需要在可重复的自动化工作流程中跟踪数据集中的变更的用户,通常会遇到这种情况。

在FME中,这就是ChangeDetector转换器的作用。它读取原始数据集和已更新后的数据集,然后输出更新,插入,删除和未更改的行。之后可以使用“ fme_db_operation”属性(由ChangeDetector设置)来定义如何处理输出系统中的要素。

为了比较现有和新的几何数据(例如宗地多边形),ChangeDetector具有两个有用的参数,包括用于定义在认为几何“变化”之前允许多少变化的容差值。要了解有关容差值和变化检测的更多信息,请阅读我们的变化检测博客,并查看ChangeDetector帮助文档以获取有关如何设置该转换器参数的详细信息。

关于性能的说明:对于包含数十万行的数据集,将整个结果区分开可能会导致性能不足。通过限制检查的列/属性的数量可以达到更好的性能,但是如果仍然不够,那么上述其它变化检测方法之一可能更适合。

观看“使用FME管理变化数据”以了解如何使用ChangeDetector在各种数据类型上比较属性和几何。我们还将演示如何将自动化用于无人值守的工作流程,您可以在后台连续运行。举一个实际的例子,美国政府的土地管理局使用ChangeDetector集成了10个空间数据源,并使其存储库保持最新。查看他们的演示文以了解他们的工作流程如何将数据库的当前版本与历史版本进行比较,并使用增量加载来大大减少大型变化数据集的处理时间。


您为CDC选择的方法实际上取决于您正在使用的格式以及可用的工具和数据。但无论使用哪种方法,我都希望您可以放心的看到该解决方案很简单。无需在数据上“发现差异” –您可以设置FME工作流来自动处理变化跟踪。

通过下载FME免费试用版来尝试自己的变化数据捕捉工作流程,并查看以下教程:

猜你喜欢

转载自blog.csdn.net/fmechina/article/details/110550088