Caching 需要帮助重写XQuery以避免MarkLogic中的扩展树缓存已满错误吗
我不熟悉XQuery和MarkLogic。 我正在尝试更新MarkLogic中的文档,并获取扩展树缓存已满错误。 为了完成这项工作,我增加了扩展树缓存,但不推荐这样做。 我想调整这个查询,使它不需要同时缓存那么多XML 这是我的问题 我已经上传了我的查询作为一个图像,因为它不是那么漂亮,当我把它粘贴在编辑器上。如果有人知道更好的方法,请建议Caching 需要帮助重写XQuery以避免MarkLogic中的扩展树缓存已满错误吗,caching,xquery,marklogic,Caching,Xquery,Marklogic,我不熟悉XQuery和MarkLogic。 我正在尝试更新MarkLogic中的文档,并获取扩展树缓存已满错误。 为了完成这项工作,我增加了扩展树缓存,但不推荐这样做。 我想调整这个查询,使它不需要同时缓存那么多XML 这是我的问题 我已经上传了我的查询作为一个图像,因为它不是那么漂亮,当我把它粘贴在编辑器上。如果有人知道更好的方法,请建议 提前感谢。执行一次选择太多XML节点的查询可能会导致扩展树缓存错误。在您的示例中,这可能是罪魁祸首:/tx:AttVal[tx:AttributeName/
提前感谢。执行一次选择太多XML节点的查询可能会导致扩展树缓存错误。在您的示例中,这可能是罪魁祸首:
/tx:AttVal[tx:AttributeName/text()=$AttributeName]
调用text()
可能是问题的根源(而且text()
可能不是您的意思-请参见),这会导致MarkLogic在所有这些节点上计算该函数,并且通过简单地使用/tx:AttVal[tx:AttributeName=$AttributeName]
它可能会解决您的问题
下一步,我想在<代码> /tx:Atval/Tx:AttAuthNeX<代码>上添加一个路径范围索引,并使用<代码> CTS:Quest< <代码> > <代码> CTS:路径范围查询< /代码>查询这些节点。这将大大快于没有范围索引的XPath。还可以将XPath与范围索引一起使用:MarkLogic将自动优化XPath表达式以使用范围索引;但是,可能存在它没有正确优化表达式的原因,您需要使用
xdmp:plan
检查是否正确
还要注意,MarkLogic中XML的一般最佳实践建议是使用“语义XML”。例如,当您指的是属性时,请使用属性:
。MarkLogic的索引针对语义XML设计进行了开箱即用的优化。但是,如果您没有选择,只能使用XML,那么这就是路径范围索引的设计目的。我刚刚解决了这个问题。我做了两件事
- 我将node replace和node insert类型调用(即将XML结构修改为单独模块的任何调用),然后使用
调用该模块,传入所需的任何参数,如下所示 让$update:=xdmp:invoke(“/app/lib/update attribute node.xqy”, (xs:QName(“newValue”),$new), {xdmp:modules-database()})xdmp:invoke
- 每当我需要在MarkLogic中循环路径(或文档或任何它们被称为的东西-我只使用MarkLogic几天)我想出了一个精心设计的方法,一次跳过并只获取一批文档,但是你可以用多种方法来完成 让$whater:=xdmp:directory(“/whater/”[$start to$end]
一次将所有昂贵的调用放入单独的模块中,只占用大数据集的一个子集,帮助我解决扩展树Cache完全错误。
堆栈溢出使用标记。请参阅此文档以了解如何适当地格式化代码:调用方法有效,并且可以考虑使用<代码> XDMP:调用函数< /CO。de>而是简化代码。我建议使用工具成批处理您的工作,而不是手动操作。请看一下Corb和Taskbot,如下所示: