MarkLogic 8 中的 CPF 和任务服务器
CPF and task server in MarkLogic 8
我创建了一个关于插入和更新文档的 CPF。这些 CPF 管道创建多个 xdmp:spawn-tasks 来执行各种任务。我对这种方法有几个问题。
- 一些生成的任务将修改原始文档。这会触发CPF的更新工作流程吗?我可以在文档上使用一个标志,表明它是衍生任务的更新。但是有没有更优雅的方法来做到这一点?
- 我需要担心死锁吗?我的意思是,如果从同一个 CPF 派生的两个任务试图同时更新同一个文档,我该如何避免这种情况?
基本上,我正在尝试对插入的文档使用信封模式,并将所有工件文档包装到一个文档中。我使用 CPF 生成此工件文档的原因是我可以使用 MLCP 或任何其他方式将文档转储到数据库中,让 CPF 担心处理,而不是使用自定义 REST 端点并通过此获取所有文档自定义 REST 端点。
我建议不要生成任务来对手头的文档应用更新。此类更新会干扰 CPF 状态的自然流动。 CPF 本身旨在让文档经历多个状态,并让每个转换都有助于整体转换。
因此,让文档经历多个 CPF 状态,并在多个此类状态转换(管道)之一中进行更新。每个状态转换已经是一个单独的事务,因此无需生成任务。
我不认为你需要担心死锁,但我可以很容易地想象并行执行更新会导致部分更新丢失,因为它们可能会被彼此覆盖。这取决于您使用的确切代码。 MarkLogic 的交易机制通常会对此进行防范,但很容易编写绕过该机制的代码。
HTH!
我创建了一个关于插入和更新文档的 CPF。这些 CPF 管道创建多个 xdmp:spawn-tasks 来执行各种任务。我对这种方法有几个问题。
- 一些生成的任务将修改原始文档。这会触发CPF的更新工作流程吗?我可以在文档上使用一个标志,表明它是衍生任务的更新。但是有没有更优雅的方法来做到这一点?
- 我需要担心死锁吗?我的意思是,如果从同一个 CPF 派生的两个任务试图同时更新同一个文档,我该如何避免这种情况?
基本上,我正在尝试对插入的文档使用信封模式,并将所有工件文档包装到一个文档中。我使用 CPF 生成此工件文档的原因是我可以使用 MLCP 或任何其他方式将文档转储到数据库中,让 CPF 担心处理,而不是使用自定义 REST 端点并通过此获取所有文档自定义 REST 端点。
我建议不要生成任务来对手头的文档应用更新。此类更新会干扰 CPF 状态的自然流动。 CPF 本身旨在让文档经历多个状态,并让每个转换都有助于整体转换。
因此,让文档经历多个 CPF 状态,并在多个此类状态转换(管道)之一中进行更新。每个状态转换已经是一个单独的事务,因此无需生成任务。
我不认为你需要担心死锁,但我可以很容易地想象并行执行更新会导致部分更新丢失,因为它们可能会被彼此覆盖。这取决于您使用的确切代码。 MarkLogic 的交易机制通常会对此进行防范,但很容易编写绕过该机制的代码。
HTH!