【问题标题】:Marklogic : Query response time is very highMarklogic:查询响应时间非常长
【发布时间】:2013-02-21 09:10:33
【问题描述】:

我在 uri 中有大约 15000 条 xml 格式的记录,例如:“documents/products/specs/*.xml”。 每个 xml 的大小约为 25 千字节。我使用一个远程 Apache Tomcat 服务器连接到这个 marklogic 服务器,该服务器有一个 XCC client (Java),它试图执行一个类似于这样的 AdHocQuery

let $a := cts:uri-match('documents/products/specs/*.xml')
          for $xml in $a
          return fn:doc($a)

(for循环在java中实现)。

这很好用。但是对于数量较多的记录,比如 15000 条记录,需要 60 分钟,此时所有服务器和互联网速度都非常好。 (uri 中所有文档的总大小约为 20 MB,不会超过 20 分钟)。

有什么解决方法吗?

【问题讨论】:

  • 15,000 * 25 = 375,000 而不是 20-MB。

标签: marklogic


【解决方案1】:

试试这个:

cts:search(
    fn:doc(),
    cts:document-query(
        cts:uri-match('documents/products/specs/*.xml')
    ), "unfiltered"
)

【讨论】:

    【解决方案2】:

    您正在做的是请求所有文档的全文。这不是典型的查询,而是数据库转储。您显示的查询将缓冲所有这些数据,然后通过 tomcat 发送它,tomcat 再次缓冲所有数据,然后将其发送给您。 这是一个要在一个请求中发送的大型数据集。

    您查询的目的是什么?如果您想获取所有文档,您应该使用诸如 mlcp 之类的程序将它们转储出来,或者通过首先收集 URI 然后获取文档来分批获取它们。这可以通过并行获取文档来大大加快速度。您可以在 xmlsh 中查看 Java 源代码示例,展示如何在 XCC 中并行获取文档

    http://xmlsh.svn.sourceforge.net/viewvc/xmlsh/extensions/marklogic/src/org/xmlsh/marklogic/get.java?revision=792&view=markup
    

    我的猜测(如果我错了,请纠正我)是您只是在试验,实际上并不需要所有文档。在这种情况下,应该尝试更实际的查询。

    【讨论】:

    • 要求是使ms-excel兼容的csv文件代表目录中的所有文件。
    • 所以问这个问题:“我怎样才能最好地制作一个与 ms-excel 兼容的 csv 文件来表示 MarkLogic 目录中的所有文档?”
    • 您希望将文档名称或内容放在 csv 中吗?
    【解决方案3】:

    查询花费这么长时间的原因是 Marklogic 服务器正在从磁盘读取大部分文件。除非你有一个非常大的树缓存大小。您需要做的是缩小查询范围。也许为文件添加一些索引。

    如果您只想对数据进行 ETL 处理,那么您可能需要批量处理请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 2020-03-30
      • 1970-01-01
      • 2014-12-23
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      相关资源
      最近更新 更多