我是XQuery和MarkLogic的新手。
我正在尝试更新MarkLogic中的文档并获取扩展树缓存已满错误。
为了完成工作,我增加了扩展的树缓存,但是不建议这样做。
我想调整此查询,以便它不需要同时缓存尽可能多的XML。
这是我的查询
我将查询上传为图像,因为当我将其粘贴到编辑器上时,它不是那么漂亮。如果有人知道更好的方法,请提出建议。
提前致谢。
最佳答案
我刚刚解决了这种情况。我做了两件事
我将node-replace和node-insert类型调用(即将XML结构修改的任何调用放入单独的模块,然后使用xdmp:invoke
调用该模块,并传入所需的任何参数,例如这样的调用)
让$ update:= xdmp:invoke(“ / app / lib / update-attribute-node.xqy”,
(xs:QName(“ newValue”),$ new),
{xdmp:modules-database()})
之所以起作用,是因为对xdmp:invoke的调用发生在它自己的事务中,并且一旦完成,便清除了内存。如果您不这样做,那么每次调用update或insert函数时,它实际上都不会执行写操作,直到单个事务结束时,这意味着您的内存将很快填满。
每当我需要遍历MarkLogic中的路径(或文档或任何称为它们的路径-我仅使用MarkLogic几天),并且有很多路径时,我一次只处理了几次,如下所示。我想出了一种精心设计的方法,一次可以跳过和仅处理一批文档,但是您可以采用多种方法来完成。
让$ whatever:= xdmp:directory(“ / whatever /”)[$ start to $ end]
我还将其放在单独的模块中,以便立即处理而不是在单个事务中处理。
将所有昂贵的调用放入单独的模块中,一次仅获取大数据集的一个子集,可以帮助我解决扩展的树缓存全部错误。
关于caching - 需要帮助重写XQuery以避免MarkLogic中扩展的树缓存已满错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23016289/