У меня есть приложение, разработанное на PHP с использованием MongoDB для атаки на базу данных. Моя проблема в том, что в некоторых случаях, чтобы сделать запрос, занимает много времени, и выдается следующая ошибка:
Исправляемая фатальная ошибка: аргумент 1, переданный MongoCollection :: __ construct (), должен быть экземпляром MongoDB, ноль указан в ..
Даже если я открою два одинаковых браузера, если я получу доступ к приложению в каждом из них, пока ни один из браузеров не завершит запрос, другой не начнет .. Почему не происходит одновременное выполнение? ..
Я использую MongoDB 2.6.5, PHP 5.3.3-7 y PHP MongoDB Driver 1.6.8.
Пример кода:
//Function call from Application
<php>
//Conectamos con la BBDD
$db = connectBbdd("modelo");
$mongoNci = $_SESSION["sesion_nci"];
$collection = new MongoCollection($db, 'users');
$js = "function() {
return this.Nci == '$mongoNci';
}";
$cursor = $collection->find(array('$where' => $js));
$array = iterator_to_array($cursor);
</php>
<php>
function connectBbdd($dbname){
Mongo::setPoolSize(10);
$m = new MongoClient("mongodb://ipremote:port");
$db = $m->$dbname;
return $db;
}
</php>
Для сообщения об ошибке может быть, что число соединений превысило размер пула 10, и соединение отклонено.
Так как ваши запросы медленные, также возможно, что некоторые из этих запросов все еще выполняются — занимая некоторые из соединений.
Что касается параллелизма, я не уверен на 100%, но это может быть потому, что нагрузка на машину может быть слишком высокой для одновременной обработки запросов.
Других решений пока нет …