【问题标题】:avoiding XDMP-EXPNTREECACHEFULL and loading document避免 XDMP-EXPNTREECACHEFULL 和加载文档
【发布时间】:2013-02-04 02:46:44
【问题描述】:

我正在使用 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-EXPNTREECACHEFULL

有什么解决方法吗?我无法在管理控制台中增加树缓存大小,因为 products/documents/*.xml 中的 xml 文件数量可能会增加。

谢谢。

【问题讨论】:

    标签: xquery marklogic


    【解决方案1】:

    当您想从 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 测试。

    【讨论】:

      【解决方案2】:

      有关此错误的一般信息,请参阅 XDMP-EXPNTREECACHEFULL 上的 MarkLogic knowledge base article

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-17
        • 2011-02-16
        • 2011-09-03
        相关资源
        最近更新 更多