Chinaunix首页 | 论坛 | 博客
  • 博客访问: 651032
  • 博文数量: 149
  • 博客积分: 3901
  • 博客等级: 中校
  • 技术积分: 1558
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-16 14:33
文章分类

全部博文(149)

文章存档

2014年(2)

2013年(10)

2012年(32)

2011年(21)

2010年(84)

分类:

2010-05-11 13:53:20


%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) |
0

上一篇:R - tree lib

下一篇:一些 我常用的 vi 命令

给主人留下些什么吧!~~