Mongodb採用$in方式提升操作效率

來源:互聯網
上載者:User
    Mongodb操作裡許多人喜歡採用PHP的迴圈操作,這種方式效率非常低下,可以最佳化。
1、查詢:
    有兩種方式,在PHP裡迴圈查詢和使用$in的方式。做一個查詢1000條資料的樣本如下:
// 迴圈查詢<br />for($i = 0; $i < count($array); $i++) {<br /> $item = $collection -> findOne(array("_id" => new MongoId($array[$i])));<br /> echo $item["profile"]["name"] . "<br />";<br />}

    已耗用時間:0.52035784721375秒

// 採用$in的方式<br />$mongoIds = array();<br />for($i = 0; $i < count($array); $i++) {<br /> $mongoIds[] = new MongoId($array[$i]);<br />}<br />$cursor = $collection -> find(array("_id" => array('$in' => $mongoIds)));<br />while($item = $cursor-> getNext()){<br /> echo $item["profile"]["name"] . "<br />";<br />}

    已耗用時間:0.15661716461182秒
    結果採用迴圈方式的已耗用時間為$in方式的3倍以上。
2、更新:
    還是兩種方式,在PHP裡迴圈更新和使用$in的方式。做一個查詢1321條資料的樣本如下:
// 迴圈更新(目前刪除blog時採用的方式)<br />foreach ($fans as $fan)<br />{<br /> $feed = $db -> command(array("findAndModify" => $MONGO_DB_FEED,<br /> "query" => array('_id' => new MongoId($fan)),<br /> "update" => array('$pull' => array("blogs"=>array("bid" => $blog_id)), '$inc' => array("count"=>-1)),<br /> "new" => true<br /> )<br /> );<br />}    已耗用時間:28.02441906929秒
// 採用$in的方式<br />$mongoIds = array();<br />foreach ($fans as $fan) {<br /> $mongoIds[] = new MongoId($fan);<br />}<br />$feed -> update(array('_id' => array('$in' => $mongoIds)), array('$pull' => array("blogs"=>array("bid" => $blog_id)), '$inc' => array("count" => -1)), array('multiple' => true));    已耗用時間:0.011945962905884秒
    結果採用迴圈方式的已耗用時間為$in方式的2335倍!
    第一種方式非常容易出現啟動並執行逾時的情況造成操作不成功,而第二種方式在提高效率的同時避免了這種問題的出現。
    造成這樣問題的原因是1、迴圈裡的網路請求時間消耗太多時間2、$in操作可以進行查詢最佳化,也不需要多次編譯。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.