我在MarkLogic 7中有一个3节点集群。我创建了一个数据库“sample-db”,其中包含以下林:
现在,从 qconsole 我运行以下FLWOR表达式:
for $i in 1 to 20000
return
xdmp:spawn-function(function(){
xdmp:document-insert(xs:string($i), <sample>{xdmp:host-name()}</sample>),
xdmp:commit()
},
<options xmlns="xdmp:eval">
<transaction-mode>update</transaction-mode>
</options>)
上述表达式在“sample-db”中插入20000个文档。 但是当我查看Task Server状态时,我可以看到只有 node-1 用于处理在Task Server中排队的任务。
是否有任何配置或代码更改,我可以让所有三个节点参与处理排队的任务?
谢谢!
答案 0 :(得分:3)
任务是特定于主机的。它们在调用xdmp:spawn
的主机上产生。
您可以编写一个替换xdmp:spawn
的REST服务并实现您自己的任务分发。或者找一些其他方法在所有主机上生成这些任务。
答案 1 :(得分:2)
我担心迈克是对的。 Spawns和evals总是与当前主持人竞争。根据您的潜在需求,还有其他方法可以解决这个问题。如果您有兴趣传播摄取负载,通过转换,您可以考虑使用MLCP。另一种方法是使用CPF或提交后触发器。这些操作针对管理文档最终所在的林的主机。
你也可以尝试在ML中创建一个自定义端点并对其进行http调用以使生成器在整个群集中传播,但我想我个人可能更喜欢我提到的其他替代方案之一。
HTH!