2012-04-12 11 views
0

私はPHPとmongodbを使用しています。私はmongodb 2.0.4を使用して、20ms以上のシステムプロファイリングを有効にしました。すべての小さなクエリで単純なページを読み込むと、4、10、時には24回といった同じクエリがシステムプロファイルに記録されます。そしてそのページは非常に遅くロードされます!なぜそれが起こっているのですか?PHPとMongoDBは同じクエリを実行しています4-30回

問合せは、のように簡単になります

$c2 = $things->find(); 
     foreach($c2 as $doc) { 
      // some code... 
     } 

感謝!!

EDIT:フルコード:

<?php 

$m = new Mongo(); 
$db = $m->selectDB("test"); 


function getAllData ($db) { 

    $some = $db->some; 

     $cursor = $some->find(); 


     $js = "function() { 
     return (("; 

     foreach ($cursor as $doc) { 
      $js .= "this.idE == '" . $doc['_id'] . "' || "; 

     } 
     $js = substr($js,0,-4); 
     $js .= ")"; 
     $js .= ");}"; 

     $names = $db->names; 
     $c2 = $names->find(array('$where' => $js)); 
     foreach($c2 as $doc) { 
      echo $doc['name']; 
     } 

} 

getAllData ($db); 


?> 
+1

大きなコードスニペットを投稿できますか? – alxbrd

+0

フルコードを追加しました。 –

+0

クエリの数はページ上の何かに関連していますか?返される$ docの数は?何らかの理由で '$ doc ['_ id']'を読むときにルックアップをやり直すことができると思っています – Paystey

答えて

0

乗じなっている2つのクエリの?

私はコードを修正して何が起こるかを見ていきます。私が最初に行うことは、 "foreach"を削除し、代わりにただ一つの "getNext"を実行し、これがクエリが呼び出された回数に影響を与えるかどうかを確認することです。私の最高の推測は、Mongoドライバが結果をバッチで取得する方法と関係があることです。クエリを実行すると、一度にすべての行がダウンロードされるわけではなく、バッチでダウンロードされます。これらのバッチフェッチが重複するクエリとして表示されている可能性があります。バッチサイズを調整できる仕組みがあると思いますが、これが役に立ちます。また、最新のドライバに更新することも役立ちます。

関連する問題