如何以块为单位处理大量文档,以免扩展树缓存已满

时间:2019-11-26 16:50:35

标签: marklogic marklogic-7

我在MarkLogic中有一个实体,该实体下大约存在98k多个文档(/someEntity/[ID].xml),在一种情况下,我必须在所有这些文档中添加一些新标签。

我准备了一个查询来添加子节点,然后尝试对接收扩展树缓存已满的实体运行。我将高速缓存的内存增加到了几个演出,并且它需要花很长时间才能完成。还尝试过xdmp:clear-expanded-tree-cache(),但也无法使用。

任何指针都说明我们如何以10k的块大小获取URL并进行处理,以便它不会增加内存,也不会在查询处理一段时间后抛出错误。

1 个答案:

答案 0 :(得分:2)

点击展开的树缓存听起来就像您将整个结果集保存在某个地方,这听起来是不必要的。可能有一些方法可以使您的代码更智能,并使其遍历结果,并尽早忘记一切。根据经验,不要将完整的结果集分配给let语句。

但是,有时分批处理工作会更容易。正如迈克尔·加德纳(Michael Gardner)所建议的,Corb是一个很好的选择。它可以从外部限制MarkLogic的负载,并在需要时降低负载。

对于像这样的较小任务,taskbot也可以解决问题,尽管很难控制其速度。

HTH!