2012-06-18 15 views
2

如果我们首次调用某个xquery模块需要一些时间。随后的调用调用速度更快可能是因为xquery模块已解析并存在于模块高速缓存中。xdmp:在MarkLogic中调用调用

考虑以下情形: -

HTTP Server1- xdmp:invoke('/a/sample.xqy') 
HTTP Server2 - xdmp:invoke('/a/sample.xqy') 

两个应用服务器指向相同的模块DB。

问题: -

  1. 后续调用为什么电话是更快?

  2. 但是,如果我们在diff应用服务器中调用相同的模块,调用速度会很慢。对于缓存目的,这个xquery模块会被视为基于appserver的单独对象吗?

  3. MarkLogic如何决定哪个条目移出模块缓存?

  4. 在调用xdmp:invoke后,MarkLogic将模块保持在高速缓存状态多久?

  5. 是否有任何ML配置来增加模块缓存大小?

回答

3
  1. 缓存 - 但我想你知道吗?
  2. 这听起来像你已经证明了这一点。它是有道理的:不同的应用程序服务器可能有不同的配置,可能会影响评估:例如命名空间和模式,以及可能的输出选项。因此,将应用程序服务器标识构建到缓存键中可能更简单。
  3. 我相信这是一个LRU缓存。我不知道它有多大。
  4. 直到空间用尽或缓存条目被更新无效。
  5. 据我所知。
0

查询是否触及数据库中的数据?如果是这样,后续对同一查询的调用可以在第二次调用时访问E节点中的扩展树缓存。

第二次呼叫要快多少?上次我测量它时,与大多数I/O解决方案的查找时间相比,查询评估时间的差异很小。

0

1.缓存: - 有三种缓存 - 扩展树,压缩树,list.Expanded树存储最近使用一个然后压缩,然后列表。 ML文件非常好地解释它。

2.如果第二个应用程序服务器在同一组中,那么理想情况下它不应该花费更多时间。如果它在一个不同的组中,那么这将需要时间。因为缓存是在组级别完成的。

3.最近使用的将会是扩展树chache,最近最少使用的将会在列表缓存中。哪些最近未使用的将从缓存中清除。

4.参考点的三阶

5.是,进入管理 - >组 - >选择您的团体--->配置选项卡。

+0

模块高速缓存不同于树高速缓存和列表高速缓存。模块缓存缓存已解析的XQuery和XSLT,也可能是JavaScript。这与缓存模块源不同,因为解析源需要时间。 – mblakele

+0

为了确认mblakele,模块缓存(xquery,xslt,rewriters)是每个应用服务器的原因,每个应用服务器的环境都不相同,包括认证,模块根,数据库,模块数据库,模式数据库,安全数据库,重写器和其他。在不同的情况下,相同的确切文件可能会“编译”为完全不同的东西。这说..什么是'慢'? XQuery解析器速度相当快,但速度并不像没有运行那么快,但服务器经过优化以平衡整体性能。它有助于查看整体服务器性能。 – DALDEI