2

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

对这种情况进行回滚的有效方法是什么?

我们没有版本管理文档。

4

1 回答 1

2

用代表 CoRB 批次的集合标记所有更改的文档怎么样?

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

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

你也可以看看https://github.com/mblakele/taskbot看看它是否给你更多的灵活性。

于 2014-07-19T17:10:15.617 回答