我正在编写一个corb任务,其中uri模块将一个文件uris列表传递给处理器模块,其中必须填充某个元素的字符串值。 uri模块列出了字符串短于所需的文档。由于在更新之后字符串将具有期望的长度,因此不再能够识别改变的文档。此外,在这些文件中也不会有任何先前字符串长度的记录。所以,我没有看到编写回滚脚本的简单方法。
对于此类方案,回滚的有效方法是什么?
我们没有版本管理文档。
答案 0 :(得分:2)
如何使用代表CoRB批次的集合标记所有已更改的文档?
一旦你知道他们都是新人,你只需致电xdmp:collection-delete
。如果您需要更精细的数据,则可以在文档或属性中将其添加为每次更新的一部分。基本上,当您触摸每个文档时,您将保存回滚信息。不要试图在单个文档中保留整个批处理的回滚信息,因为每个CoRB线程都希望同时更新它。
这种方法意味着您必须以某种方式提供批次ID。我可能会将它直接编码到最短的CoRB XQuery模块中。我写了一个库模块,其中的函数可以完成批处理工作的所有重要工作。然后,一个简单的shell脚本可以为每个批处理作业写出一个新的主模块,批处理ID直接编码到XQuery中。该主模块将为CoRB定义$URI
,导入库,并调用函数:类似mylib:batch-operation($URI, "batch-"||1234567)
。 shell脚本将提供batch-id:批处理开始时的纪元秒,或者对你有意义的任何内容。
您还可以查看https://github.com/mblakele/taskbot,看看它是否为您提供了更大的灵活性。