我正在使用 marklogic 4,并且有大约 15000 个文档(每个文档大约 10 KB)。我想将整个内容作为文档加载(并将所有文档转换为单个 csv 文件并输出到 HTTP 输出流以供下载)。当我以这种方式加载文档时:
let $uri := cts:uri-match('products/documents/*.xml')
let $doc := fn:doc ($uri)
xpath 有大约 15000 个 xml。所以fn:doc抛出错误XDMP-EXPNTTreeCacheFull.
有什么解决方法吗?我无法在管理控制台中增加树缓存大小,因为 xml 文件的数量产品/文档/*.xml可能会增加。
Thanks.
当您想要从 MarkLogic 导出大量 XML 时,最好的技术是编写查询,以便结果可以流式传输,从而完全避免扩展树缓存。不过,这是一种非常不同的编码风格:您必须避免任何类型的强类型,并重构代码以删除 FLWOR 表达式。您也无法在 cq 或 qconsole 中测试任何代码。
看一眼http://blakeley.com/blogofile/2012/03/19/let-free-style-and-streaming/有关如何到达那里的一些提示。您发布的代码示例至少必须变为:
doc(cts:uri-match('products/documents/*.xml'))
顺便说一句,我会尝试修改它以避免*.xml
部分,因为它会比需要的慢。也许是这样的?
cts:search(
collection(),
cts:directory-query('products/documents/', 'infinity'))
如果您需要测试目录以外的内容,您可以添加cts:and-query
和一些cts:element-query
test.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)