对大量文档执行xquery时,扩展树缓存完全异常

时间:2019-05-29 18:03:53

标签: xquery marklogic

我正在尝试从多个文档(大约80万个文档)中检索xpath的值。我遇到了

  

扩展树缓存已满。

当文档较少(即40万个文档)时,相同的查询会产生预期的输出。

以下是用于从集合(collection1和collection2)中检索xpath值的查询:

cts:search(doc(),cts:and-query((cts:collection-query("collection1"),cts:collection-query("collection2"))))/xpath/text()

2 个答案:

答案 0 :(得分:3)

您从查询返回的每个文档都必须完全加载到内存中-这是扩展的树缓存。因此,单个查询受其可放入内存的文档数量的限制。

对于需要读取整个数据库(或大子集)的查询,应实现分页或批处理以防止发生错误。如果您试图从数据库中导出文档,MLCP将自动为您进行批处理。

答案 1 :(得分:2)

请查看此处的答案是否对您有帮助-https://help.marklogic.com/Knowledgebase/Article/View/9/16/resolving-xdmp-expntreecachefull-errors。如此处所说:“ 当查询需要实际检索元素,值或以其他方式遍历这些片段之一的内容时,该片段将被解压缩并缓存在扩展树缓存中。

因此,请尝试重写查询以检索较少数量的文档。如果您有足够的内存,增加扩展的树缓存大小可能也有帮助。