如何防止MongoDB::command()阻塞?



我正在通过PHP客户端库运行一些map reduce作业:

$m = new Mongo(MY_CONN_STRING);
$db = $m->selectDB(MY_DB);
// run the map reduce function inside the DB
$db->command(array(
    "mapreduce" => "CBD", 
    "map" => $map,
    "reduce" => $reduce,
    "query" => $filter,
    "out" => $out));

我想立即将控制返回到线程,让map reduce命令在后台完成,但目前MongoDB::command()正在阻塞。

任何想法?

不完全是。您可以设置一个客户端超时,以便命令立即超时,然后稍后检查$out集合,但是您永远无法检索命令结果(或查看它是否成功)。

强制立即超时看起来像这样:

try {
    $db->command(array(...), array("timeout" => 1)); // timeout after 1ms
}
catch (MongoCursorTimeoutException $e) {
    // do nothing
}

相关内容

  • 没有找到相关文章

最新更新