2

如果我们xquery第一次调用某个模块需要一些时间。随后的调用调用更快可能是因为xquery模块被解析并存在于模块缓存中。

考虑以下情况:-

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

两个应用服务器都指向相同的 Modules DB。

问题 :-

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

  2. 但是,如果我们在 diff app server 中调用相同的模块,则调用会很慢。出于缓存目的,这个 xquery 模块是否会被视为基于 appserver 的单独对象?

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

  4. MarkLogic 在xdmp:invoke调用后将模块保存在缓存中多长时间?

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

4

3 回答 3

3
  1. 缓存 - 但我想你知道吗?
  2. 听起来你已经证明了这一点。这是有道理的:不同的应用程序服务器可能具有可能影响评估的不同配置:例如,命名空间和模式,以及可能的输出选项。因此,将 app-server id 构建到缓存键中可能更简单。
  3. 我相信这是一个 LRU 缓存。我不知道它有多大。
  4. 直到它用完空间,或者缓存条目因更新而失效。
  5. 据我所知不是。
于 2012-06-18T22:32:35.953 回答
0

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

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

于 2012-06-19T00:13:17.443 回答
0

1.缓存:- 有三种缓存-扩展树,压缩树,列表。扩展树存储最近使用的一种然后压缩然后列表。ML 文档很好地解释了它。

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

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

4.参考第三点

5.是的,去 Admin--> group-->choose your group ---> configure tab。

于 2015-03-23T12:20:36.513 回答