%2B/api/index.html
本来 希望计算歌曲 PV UV ,结果发现 mongo 的客户端 非常差
首先 像 distinct 和 sort 超过 5万条数据 就很有可能内存溢出
计算效率非常慢 :
mongo --eval '
var da = db.getMongo().getDB("dw").data;
var ms = da.distinct("pmn",{ "ab":"100019","aop":"be","wv":"1.3"}) ;
for(var ii=0;ii
var uv = da.distinct("auid",{ "ab":"100019","aop":"be","wv":"1.3","pmn":ms[ii]}).length ;
var pv = da.count({ "ab":"100019","aop":"be","wv":"1.3","pmn":ms[ii]}) ;
print(ms[ii],"\t",pv,"\t",uv);
}
' > /tmp/100019_1.3.txt
|
现在 改 成 py , 上面 描述的问题就可以解决 :
#encoding: utf-8
import pymongo
connection = pymongo.Connection("localhost", 27017)
db = connection.dw
dd = db.data.find({ "ab":"100019","aop":"be","wv":"1.3"})
ii=0
pmns={}
for cc in dd:
if cc.has_key("pmn") :
if not pmns.has_key( cc["pmn"] ) :
pmns[ cc["pmn"] ] = {}
if cc.has_key("auid") :
if not pmns[ cc["pmn"] ].has_key( cc["auid"] ) :
pmns[ cc["pmn"] ][ cc["auid"] ]=1
else :
pmns[ cc["pmn"] ][ cc["auid"] ]+=1
ff=open('/tmp/100019_1.3.txt','w')
for pm in pmns.keys() :
pv,uv=0,0
for us in pmns[pm].keys() :
pv += pmns[pm][us]
uv += 1
print>>ff, '%s\t%s\t%s' % (pm.encode('utf8'),pv,uv)
|
阅读(916) | 评论(0) | 转发(0) |