2011年9月3日土曜日

gmongoでbulk insertを使用してオブジェクトを挿入する

gmongoでbulk insertを使用してオブジェクトを挿入するには、以下のコードの2番目コードのinsertのように配列でオブジェクトを渡します。bulk insertでは通常のinsertと比較して高速にオブジェクトを挿入できます。
通常のinsertのコード
@Grab(group='com.gmongo', module='gmongo', version='0.8')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
// DBが既に存在する場合は削除
dbname = "perftest"
if( mongo.getDatabaseNames().contains(dbname) ){
  mongo.dropDatabase(dbname)
}
db = mongo.getDB("perftest")
st = System.currentTimeMillis()
// コレクションにオブジェクトを挿入する
col = db["stores"]
(1..10000).each{
  col.insert([country:"Japan", store:"store_${it}", sales:100])
}
println "processed ${col.count()} rows in ${System.currentTimeMillis()-st}ms."
bulk insertを使用したコード
@Grab(group='com.gmongo', module='gmongo', version='0.8')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
// DBが既に存在する場合は削除
dbname = "perftest"
if( mongo.getDatabaseNames().contains(dbname) ){
  mongo.dropDatabase(dbname)
}
db = mongo.getDB("perftest")
st = System.currentTimeMillis()
// コレクションにオブジェクトを挿入する
col = db["stores"]
(1..10000).step(2){
  col.insert([
    [country:"Japan", store:"store_${it}", sales:100],
    [country:"Japan", store:"store_${it+1}", sales:100]
  ])
}
println "processed ${col.count()} rows in ${System.currentTimeMillis()-st}ms."
実行速度計測結果

通常insert(ms)bulk insert(x2)(ms)
1回目38552961
2回目40762980
3回目35763314
平均3835.673085


動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.8, MongoDB 1.8.2

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo

groovyとMongoDBのまとめ

0 件のコメント:

コメントを投稿