Могу ли я предотвратить блокировку MongoDB :: command ()? - PullRequest
0 голосов
/ 22 ноября 2011

Я выполняю некоторые задания по уменьшению карты через клиентскую библиотеку PHP как таковую:

$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));

Я хотел бы сразу же вернуть управление потоку и позволить команде карты завершения завершить в фоновом режиме, однако в настоящее время MongoDB :: command () блокируется.

Есть идеи?

1 Ответ

2 голосов
/ 23 ноября 2011

Не совсем. Вы можете установить тайм-аут на стороне клиента, чтобы команда немедленно отключалась, а затем проверять коллекцию $ out позже, но вы никогда не сможете получить результат команды (или посмотреть, успешно ли он).

Принудительный тайм-аут будет выглядеть примерно так:

try {
    $db->command(array(...), array("timeout" => 1)); // timeout after 1ms
}
catch (MongoCursorTimeoutException $e) {
    // do nothing
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...