要素缓存: 创作FME工作空间的一种新模式

 

翻译文章链接:https://blog.safe.com/2018/05/caching-data-fme-evangelist174/

作者: Mark Ireland

 

对我而言最开心的事情之一就是在家里办公的时候,从窗子可以看到外面的花园,并且可以观察到松鼠捕获食物并把它们带回过冬。

令人烦心的是他们会偷袭我的喂鸟器,但是我想这对于他们是很重要的。他们在夏天收集食物并为即将到来的冬天存储起来。

我不知道是否我们的开发人员也观察松鼠,但是FME 2018有个非常相似的功能用来缓存数据。我以前在视频培训和FME巡展中都推荐了要素缓存,但是我忽略了,并不是每个用户都观看了视频或者参加了会议。

尽管对于工作空间的开发来说这是件大事,但是它的存在并没有特别明显。

因此这篇博客是关于FME 2018中的要素缓存。我将介绍什么是要素缓存,它如何工作,缓存的数据如何使用和其作用,并提供一些建议和技巧来使用这个功能。

我将为每个人进行介绍,所以尽管你已经了解了这个功能,也请读一读……

 

什么是要素缓存,它如何工作?

像松鼠一样,FME中的要素缓存简单的将数据保留下来为了在需要使用它们时很方便地访问。

在FME Workbench的菜单中,选择Run With Feature Caching来打开这个功能:

 

你可能会观察到,在工具栏有个按钮也可以激活数据缓存功能。一旦它被激活,FME就在它的处理过程中缓存数据:

 

绿色放大镜的图标表示每个特定步骤的缓存数据。在上图中你可以看到Tester的两个输出端口Passed和Failed的要素都被保留到了缓存中,我可以移动鼠标悬停到绿色按钮上来查看被存储的数据的信息:

所以缓存数据是很简单的。打开功能开关并运行工作空间。当然,缓存数据会加重系统开销,工作空间的运行将变慢,所以你可能会担心它的作用是什么……

 

缓存数据的作用是什么?

如果你以前用过FME的话,你可能会注意到在菜单栏上用 Run with Feature Caching 替代了 Run with Full Inspection。这是因为查看数据可以使用缓存数据了。我可以点击绿色的图标来浏览特定的缓存,或者通过按住Ctrl+I来选择多个转换器,以查看他们的数据:

 

这很棒!这意味着我可以浏览任何我需要的数据,而不用手工放置一个Inspector转换器。如果上图所示的AreaCalculator转换器的结果不是我希望的,我可以在转换器的前后分别浏览数据以分析可能存在的问题。

但是与这个一样棒的是,我们称为部分运行的东东!

部分运行 (Partial Runs)

让我们继续,在上面的工作空间中,我对AreaCalculator转换器做了些改变。效果如下图所示:

 

在AreaCalculator转换器上的缓存图标,以及任何后续的转换器的缓存图标,都变成了黄色。这表明这些数据内容已经和工作空间将要实际运行后产生的结果不匹配了。我仍旧可以浏览这些数据,但是这些缓存数据是“旧”的。

但是更为重要的是在AreaCalculator的弹出菜单中有新的运行选项:

Run From This 意味着从这地方开始往后执行。这不需要运行任何这个转换器前的流程,因为数据都缓存了!这里我们通过耗费了缓存数据来节省了运行时间。因为Tester转换器具有最新的缓存,AreaCalculator可以使用这些数据,也就不用从头运行了。

另外一种相同的运行方式是在选择写要素类并选择 Run To This:

注意FME运行的部分是如何变成绿色高亮显示的。通过这种方式,可以看到FME通过工作空间回到其找到有效的缓存。

简而言之,就是Feature Caching和Partial Runs。当然,就像任何FME功能一样,可以通过多种方式将工具应用于我们的优势……

 

要素缓存的技巧和窍门

要素缓存的最佳用途之一是缓存Web服务的结果。这是我创建的工作空间用来生成一个显示FME World Tour活动的网页:

带InlineQuerier的部分花了我一点时间才得到正确的结果,我不得不几次运行工作区。 但看,它之前有两个Geocoder转换器!一个地理编码点,另一个取得它的时区(你知道我们可以这样做吗?)有70多条记录需要几分钟时间来对数据进行地理编码,并且我不希望每次测试InlineQuerier时都会发生这种情况。

 

然而,用FME 2018,我不需要那么做。 我打开缓存,以便Geocoders缓存他们的数据。 然后,我可以通过让缓存使用InlineQuerier。因此,使用缓慢的网络资源(如数据库和Web服务)时,要素缓存是一项巨大的优势。

同时运行(Simultaneous Runs)

但真正的缓存对于任何大型数据集都很有用,尤其是当开始制作新的工作空间时。比方说,我正在创建一个工作空间,开始添加一个读模块来读取500万个地址记录的数据库:

通常的次序是添加转换器到工作空间,然后通过运行工作空间进行测试。但是在FME 2018中,可以打开要素缓存(Feature Caching),并立即运行工作空间。为什么呢?因为当FME读取和缓存数据的同时,我可以继续编辑工作空间,他们可以同时进行!

当我放置第一个转换器的时候,FME将开始读取数据并缓存他们,为直接在转换器上使用做准备。

总之,我可以同时运行和制作工作空间! 等待读取或转换数据的时间可以更有用地使用。

模版和缓存

(FME的)模板功能已经存在了一段时间,这是将工作空间及其数据一起存储在单个文件中的好方法。在FME2018中,数据的定义扩展到现有的功能缓存:

因此,现在可以带有缓存来保存工作空间,稍后可以带缓存重新打开它。可能再也不需要再次运行整个工作区了!

折叠书签和缓存

正如我所提到的,要素缓存的一个缺点是创建初始缓存的性能损失,因为显然需要使用更多时间和系统资源。另外,必须缓存整个工作空间,而不仅仅是感兴趣的部分,对吗?所以如果我运行这个工作空间,所有的转换器都会被缓存:

正确么?答案不是这样的。可以在工作空间的某些部分“关闭”缓存。通过简单地折叠书签来实现这一点(另一个2018年的新功能):

现在我运行该工作空间,FME只缓存最终连接的输出端口。在这种情况下,StatisticsCalculator:Complete输出端口被缓存,但没有其他。这样就通过减少缓存数量来加速处理过程。

简而言之,如果对工作空间的某个部分不感兴趣,请将其隐藏在折叠书签中以加快缓存过程。

连接点(Junctions)

假设我有这样的工作空间,并且想要运行两个分支来退出Geocoder_2:

我可以运行其中一个(在书签本身使用Run From This),但要运行两者,我必须选择Geocoder_2并选择Run From This。当然,这意味着Geocoder本身将运行,而我并不需要它。所以在这种情况下,我只需添加一个Junction变压器:

现在我可以在连接点上Run From This,不必重新运行Geocoder_2。

顺便提一下,即将发布的FME2018.1将防止连接点(Junction)转换器使其他转换器缓存过时。由于连接点(Junction)转换器什么都不做,它根本不会影响数据。

 

为什么FME Server没有

这里有一个问题,我被问到了,我的同事Jen被问到了,我们的联合创始人Dale也被问到:Feature Caching如何集成到FME Server中?

简而言之,它不会集成的,我们不打算进行任何集成。

但如果你经常问这个问题,一定会有些困惑。让我试着澄清一下:将此功能视为工作空间“创作模式”或“设计模式”。它的目的是使用缓存来构建一个工作空间,因为这是部分运行有用的时候。每次添加新转换器时,都可以通过运行转换器而不是整个工作空间来测试其运行。

但是在制作过程中(特别是在FME Server上),你将缓存关闭,因为你没有编辑工作空间,并且最终用户也不想执行部分运行。缓存在FME Server上唯一有用的是读取数据集并打开Web服务,并且FeatureReader转换器上已经有一个缓存选项了:

在这里,我正在从PostGIS数据库读取数据,但我也将这些数据缓存了24小时。因此,如果我将工作空间发布到FME Server,我不担心在FME Desktop上创建缓存并上传它们。使用此选项,FME Server的引擎会自动创建缓存,并自动刷新它。

如果在FME Desktop上存在任何其他要在FME Server上重新使用的数据(例如缓存的地理编码数据),请使用写模块保存地理编码后的数据,从工作空间中移除Geocoder转换器,然后放入读模块来读取保存的数据。这样你读取的就是FME Server上的数据,而不是Web服务。

换句话说,FME Server用于使用更永久的数据和数据集,而不是缓存数据。

空间记忆和缓存

我读到过有说法松鼠有一个非常强大的空间记忆,这很像FME。这是他们如何设法找回他们存储的食物。我还发现,松鼠不会冬眠,并且非常活跃,以致于一群松鼠被称为一团糟!这听起来很像FME。我不太喜欢这样建议----但也许我们应该有一个FME松鼠吉祥物,而不是FME蜥蜴!

无论如何,如果你想了解更多关于缓存数据的事情,不要忘记我们将于6月27日举办一个名为“升级到FME Desktop 2018”的培训课程。它是免费的,所以如果你打算升级到2018年或最近已经完成了,为什么不注册呢?你将从我们的顶级FME专家那里了解现在可用的其他一些新功能。

猜你喜欢

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