如何在MarkLogic集群的所有节点上分布任务服务器线程?

如何在MarkLogic集群的所有节点上分布任务服务器线程?,marklogic,Marklogic,我在MarkLogic 7中有一个3节点集群。我创建了一个数据库“sample db”,它具有以下林: 示例-db-01位于节点-1上 示例-db-02位于节点2上 示例-db-03位于节点-3上 现在,我从qconsole运行以下FLWOR表达式: 在1到20000之间的$i 返回 xdmp:spawn函数(函数(){ xdmp:documentinsert(xs:string($i),{xdmp:host-name()}), xdmp:commit() }, 更新 ) 上述表达式在“示例

我在MarkLogic 7中有一个3节点集群。我创建了一个数据库“sample db”,它具有以下林:

  • 示例-db-01位于节点-1上
  • 示例-db-02位于节点2上
  • 示例-db-03位于节点-3上
  • 现在,我从qconsole运行以下FLWOR表达式:

    在1到20000之间的$i
    返回
    xdmp:spawn函数(函数(){
    xdmp:documentinsert(xs:string($i),{xdmp:host-name()}),
    xdmp:commit()
    }, 
    更新
    )
    
    上述表达式在“示例数据库”中插入20000个文档但是当我查看任务服务器状态时,我可以看到只有节点1用于处理任务服务器中排队的任务

    是否有任何配置或代码更改可以使所有三个节点都参与处理排队的任务


    谢谢

    任务是特定于主机的。它们在调用
    xdmp:spawn
    的主机上繁殖


    您可以编写一个REST服务来替换
    xdmp:spawn
    ,并实现您自己的任务分发。或者找到其他方法在所有主机上生成这些任务。

    恐怕Mike是对的。繁殖和评估始终针对当前主机运行。根据您的潜在需求,还有其他方法可以实现这一点。如果您有兴趣使用转换来扩展摄取负载,您可以考虑使用MLCP。另一种方法是使用CPF或post commit触发器。它们针对管理文档最终所在林的主机运行

    您还可以尝试在ML中创建一个自定义端点,并对其进行http调用,以使派生分布在集群中,但我个人可能更喜欢我提到的其他替代方法之一


    重新发布上一条评论:我还尝试使用以下代码将taskbot任务服务器线程分散到集群中:
    tb:list段进程(1到20000,1,“sample”,function($list as item()+,$opts as map:map?){tb:maybe-fatal(),for$I in$list return xdmp:document insert(xs:string($I),{xdmp:host-name()),xdmp:commit()},(),$tb:OPTIONS-UPDATE)
    taskbot的自述文件解释了它严重依赖于spawn和invoke。同样的问题……只是为了澄清CPF替代方案。在数据库上安装CPF时,会创建一组提交前和提交后触发器。如前所述,预提交触发器将在处理更新的同一主机上触发,后提交触发器将在承载导致触发的数据的D节点上触发。如果CPF触发器不是这样执行的,请告诉我。谢谢对的预提交触发器处理低级状态更改,后提交触发器处理CPF状态,即调用的操作。查看您最近的问题,我将备份并描述您的最终用户想要解决的问题。别在这里做,太宽了。发布到开发人员邮件列表。不要假设任何特定的解决方案:描述用户故事。