MarkLogic 8中的CPF和任务服务器

时间:2016-05-23 15:37:29

标签: marklogic marklogic-8

我在插入和更新文档时创建了一个CPF。这些CPF管道创建多个xdmp:spawn-tasks以执行各种任务。我对这种方法有几个问题。

  1. 某些衍生任务将修改原始文档。这会触发CPF的更新工作流程吗?我可以在文档上使用一个标志,表示它是来自衍生任务的更新。但有没有更优雅的方式来做到这一点?
  2. 我是否需要担心死锁?我的意思是,如果从同一个CPF中生成的两个任务尝试同时更新同一个文档,我该如何避免这种情况?
  3. 基本上我正在尝试为插入的文档使用信封模式,并将所有工件文档包装到一个文档中。我使用CPF生成此工件文档的原因是我可以使用MLCP或任何其他方式将文档转储到数据库中,让CPF担心处理,而不是使用自定义REST端点并通过此方式获取所有文档自定义REST端点。

1 个答案:

答案 0 :(得分:0)

我建议不要生成任务来对手头的文档应用更新。此类更新将干扰CPF状态的自然流动。 CPF本身旨在通过多个状态获取文档,并使每个过渡都有助于整体转换。

因此,让文档经历多个CPF状态,并在一个或多个此类状态转换(管道)中进行更新。每个状态转换都是一个单独的事务,因此不需要生成任务。

我不认为您需要担心死锁,但我可以轻易地想象并行执行更新会导致部分更新丢失,因为它们可能会被相互覆盖。这取决于您使用的确切代码。 MarkLogic的事务机制通常可以防范这种情况,但编写绕过该机制的代码很容易。

HTH!