Marklogic CPF策略

时间:2018-09-27 19:32:42

标签: marklogic marklogic-9

对于集合中文档的插入/更新操作,我已打开CPF。我想确保在我的CPF中,如果我修改另一个文档,我不希望它被添加到CPF队列中。我该如何实现?

例如:   说在我的CPF队列中我有后续文件

d1,d2,d3,d4,d5

d1的CPF任务中,我不得不更新文档d4。我需要设置什么CPF状态,以便不会将d4添加到CPF队列的末尾。但是,如果队列中已经存在d4,则应继续进行常规CPF程序。

可以做到吗?如果是这样,那么遵循的好策略是什么。

2 个答案:

答案 0 :(得分:2)

如果CPF已更新并且在域范围内,它将始终在d4上自动触发,但是该框架包含确保其一次仅在一种状态下处理文档的代码。因此,它拾取d4并开始对其进行处理,然后触发另一个d4触发器,该触发器最终将无所事事。我认为构图的方式是:处理完d4后,如何对其进行标记,以便不再进行处理?如果它正在处理中,则无需担心。如果它已经完成,则需要将其置于终端状态(即在任何相关管道中都没有过渡的状态)。

如果您尝试以不应该触发它的方式更新d4,这意味着您要在第一次触发d4的工作上设置竞赛条件,我不建议您尝试这样做。真的很难弄清楚所有比赛条件。

答案 1 :(得分:1)

如果要通过集合定义CPF域,则可以对集合进行一些技巧。

例如,假设您在一个名为“ blue”的集合中有一堆文档,并且想要对它们应用CPF管道。但是根据您的要求,它必须是有条件的。因此,不要使CPF域带有“蓝色”集合,而应使其位于“绿色”上。然后使用预提交触发器在“蓝色”集合上创建/修改,以将文档也添加到“绿色”,从而触发CPF管道(也可以从“绿色”中删除文档)。但是预提交触发器可以说-如果文档已经在“红色”中,那么我不会将其添加到“绿色”中。

要使用该功能,您的CPF管道可以将d4添加到“红色”,告诉预提交触发器也不要将d4也添加到“绿色”。如果d4已经为绿色,则可以-CPF管道仍将根据需要运行。