Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8696

mongodb の BulkOp を使ってパフォーマンスをあげてみたで

$
0
0

公式

イメージ

  • 繰り返し処理などで一回一回 db に接続しにいく処理があったとする。
  • その処理は結構大変なので、パフォーマンスが激減する。

    • 例えば、洗濯物をタンスにしまうときに、
    • タンスを開ける -> 洗濯物を一枚入れる -> タンスを閉める...
    • この処理をその回数分繰り返しているような感じ。
    • 非常に能率が悪いことがわかる。
  • BulkOp を使うと、

    • Bulk に貯めといて、一回で db に全部入れておしまい ♪
    • みたいな感じになると思っている。

一例

asyncなんかの関数(なんかの引数){(省略)// mongodb に接続してなんかの db を取得する。 今回は page としよう。constpageCollection=mongoose.connection.collection('pages');// bulk を作る。 この時点では空っぽ。。。constunorderedBulkOp=pageCollection.initializeUnorderedBulkOp();// 繰り返し処理for(leti=0;i<pages.length;i++){if(originPages[i].redirectTo!==pages[i].path){thrownewError('The new page of to revert is exists and the redirect path of the page is not the deleted page.');}// 一回 bulk に貯めとく。unorderedBulkOp.find({_id:originPages[i]._id}).remove();}//繰り返し処理が終わったら,db に接続する。try{awaitunorderedBulkOp.execute();}catch(err){(省略)

どれくらい早くなんの?

  • 数十件ならばそんなに変わらない。
  • 数千件になると、約1分30秒位変わる。
  • つまり多ければ多いほど、この効果を実感できる。

Viewing all articles
Browse latest Browse all 8696

Trending Articles