我有一个查询可能会返回最多2000个文档。 在这些文档中,我需要六个pcdata项作为字符串值返回。 由于文档大小范围从小到很大,因此存在可能性, exp树缓存错误。ML上的任务服务器
我正在寻找产卵功能来分解我的结果集。 我会根据已知的“唯一键结构”传递通配符值,并知道可能的最大结果数量;每个通配符值将返回最多100个文档。 注意:唯一键结构的pcdata确实有一个范围索引。
我在下面的正确轨道上? 任务服务器将创建三个任务。 任务服务器将允许多个查询运行,但什么会阻止它们全部同时运行并吹出exp树缓存? 即,如果有什么,强制一个线程等待另一个线程?还是等待另一个任务,这样他们都不会一起吹出exp树缓存?
xquery version "1.0-ml";
let $messages :=
(:each wildcard values will return 100 documents max:)
for $message in ("WILDCARDVAL1","WILDCARDVAL2", "WILDCARDVAL3")
let $_ := xdmp:log("Starting")
return
xdmp:spawn-function(function() {
let $_ := xdmp:sleep(5000)
let $_ := xdmp:log(concat("Searching on wildcard val=", $message))
return concat("100 pcdata items from the matched documents for ", $message) },
<options xmlns="xdmp:eval">
<result>true</result>
<transaction-mode>update-auto-commit</transaction-mode>
</options>)
return $messages
随着通配符值被传递,没有任何*个人*任务可以在超过100个文档上工作 不幸的是,在这一点上不能真正改变数据结构,想到了所需值的范围索引 – paulj
我明白他们没有彼此等待,但是如果资源不可用,它们不会“运行”,即8个任务都使用exp树缓存运行,所以它们“阻塞”。 ly资源是迫使他们排队的最大线程。 – paulj
@paulj是的,但是通过拆分作业,您可能会阻止缓存一次完成整理,在这种情况下,您的查询可能会更少的任务线程。任何读取文档的内容都将从展开的树缓存中读取,而不会在线程级别上阻塞。范围指标可能是你最好的选择。 – wst