본문 바로가기

오픈소스/mongodb

문서의 크기가 작으면 집계함수 성능이 올라갈까?

처음 호기심은 문서가 아주 큰 경우에 건 수가 얼마 되지 않아도 디스크 I/O 때문에 어쩔 수 없이 느려지게 된다. 그러면 문서가 아주 작고 100만건 정도 문서들의 집계함수는 빨라지는가?


db.foo.createIndex({dt:1,did:1,ps:1})


var start = new Date()

db.foo.aggregate([

{$match:{dt:"20150629"}}

,{$project: {dt:1, did:1}}

,{$group:{_id:{dt:"$dt", did:"$did"}, cnt:{$sum:1}}}

]

,{allowDiskUse:true})

var end = new Date()

print(end-start)

8.110 secs


2~300mb disk i/o speed


만족스러울 만한 수준은 아니며, 우선 집계가 메모리에서 불가능하다.


#!/usr/bin/env python

# -*- coding:utf-8 -*-

import sys 

import uuid

import random


length=1000000

buf="""{dt:"20150629",did:"%s",uid:"%s",ps:%d,hourly:[%s]}\n"""


out = ""

for x in xrange(0, length):

    tmp = ""

    for y in xrange(0, 24):

        if tmp == ""

            tmp = "{\"%d\":%d}" % (y, random.randint(0,1))

        else:

            tmp += ",{\"%d\":%d}" % (y, random.randint(0,1))

    out = buf % (uuid.uuid1(), uuid.uuid1(), random.randint(0,1), tmp)

    sys.stdout.write(out)




'오픈소스 > mongodb' 카테고리의 다른 글

Mongo-Hadoop Integration  (0) 2015.07.28
MongoDB Hadoop Connector 사용기  (0) 2015.07.15
몽고디비 궁금한 점들  (0) 2015.06.03