2015-10-05 50 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%確定,但可能是因爲機器上的負載可能太高而無法同時處理查詢。