처음 호기심은 문서가 아주 큰 경우에 건 수가 얼마 되지 않아도 디스크 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 |