2015-10-05 27 views
3

我有一个使用MongoDB开发的PHP应用程序来攻击数据库。我的问题是,在某些情况下,要进行查询,需要很长的时间,并引发以下错误: 可捕获的致命错误:传递给MongoCollection :: __ construct()的参数1必须是MongoDB的实例,null给出..MongoDB + PHP没有并发

即使我打开两个浏览器相同,如果我访问应用程序中的每个他们,直到没有一个浏览器就不会结束的查询,其他没有它开始。为什么没有并发?..

我使用MongoDB 2.6.5,PHP 5.3.3-7和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> 

回答

0

对于该错误消息,这可能是因为连接的数目超过10的池大小和连接被拒绝。

由于您的查询速度很慢,所以还有可能这些查询中有一些仍在运行 - 占用一些连接。

关于并发性,我不是100%确定,但可能是因为机器上的负载可能太高而无法同时处理查询。