Marklogic-corb任务的回滚

Marklogic-corb任务的回滚,marklogic,rollback,marklogic-corb,Marklogic,Rollback,Marklogic Corb,我正在编写一个corb任务,其中uri模块向处理器模块传递文档的uri列表,其中必须填充某个元素的字符串值。uri模块列出了字符串短于所需长度的文档。由于更新后字符串将具有所需的长度,因此无法再识别更改的文档。此外,在这些文件中也不会有任何以前字符串长度的记录。所以,我不认为有一种简单的方法可以编写回滚脚本 对于此类场景,什么是执行回滚的有效方法 我们没有版本管理文档。如何使用表示CoRB批的集合标记所有更改的文档 一旦知道它们都是新的,您只需调用xdmp:collection delete。如

我正在编写一个corb任务,其中uri模块向处理器模块传递文档的uri列表,其中必须填充某个元素的字符串值。uri模块列出了字符串短于所需长度的文档。由于更新后字符串将具有所需的长度,因此无法再识别更改的文档。此外,在这些文件中也不会有任何以前字符串长度的记录。所以,我不认为有一种简单的方法可以编写回滚脚本

对于此类场景,什么是执行回滚的有效方法


我们没有版本管理文档。

如何使用表示CoRB批的集合标记所有更改的文档

一旦知道它们都是新的,您只需调用
xdmp:collection delete
。如果您需要更细粒度的数据,您可以将其作为每次更新的一部分添加到文档或属性中。基本上,您可以在触摸每个文档时保存回滚信息。不要试图在单个文档中保存整个批的回滚信息,因为每个CoRB线程都希望同时更新它

这种方法意味着您必须以某种方式提供批次id。我可能会将其直接编码到尽可能短的CORBXQuery模块中。我将编写一个库模块,其中的函数完成批处理工作的所有重要功能。然后,一个简单的shell脚本可以为每个批处理作业编写一个新的主模块,批处理id直接编码到XQuery中。该主模块将为CoRB定义
$URI
,导入库,并调用一个函数:类似于
mylib:batch operation($URI,“batch-”| 1234567)
。shell脚本将在批处理开始时提供批处理id:epoch秒,或者任何对您有意义的信息


您还可以查看一下,看看它是否给您带来了更大的灵活性。

@callow,您还可以跟踪文档属性中的原始值,可能由相同的批处理id标记。这使得回滚只需将属性中的值转换为主xml即可。。