V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐工具
RoboMongo
推荐书目
50 Tips and Tricks for MongoDB Developers
Related Blogs
Snail in a Turtleneck
justfly
V2EX  ›  MongoDB

有谁用过pymongo处理过大量数据的?进来看下啊

  •  
  •   justfly · 2013-01-23 14:25:56 +08:00 · 4919 次点击
    这是一个创建于 4348 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我要把几个collection中的数据整合到一个collection中,来用一种更友好的数据结构,
    用下面的python代码,db.index中有11W条数据,查出来组合再存入,估算了一下,在我的本子上完成要两个小时,各位大神,难道是我的方法不对?有办法优化吗

    from pymongo import MongoClient

    connection=MongoClient()
    db=connection['wordnet']

    def domerge():
    allindex=db.index.find({})
    i=0
    for indexitem in allindex:
    word={}
    word['word']=indexitem['word']
    word['concept']=[]
    for conceptitem in indexitem['concepts']:
    concept={}
    concept['num']=conceptitem
    concept['synonyms']=db.synonyms.find_one({"concept":conceptitem})['synonymses']
    concept['gloss']=db.gloss.find_one({"concept":conceptitem})['gloss_en']
    word['concept'].append(concept)
    db.mergedata.insert(word)
    i=i+1
    print i

    if __name__ == '__main__':
    domerge()
    6 条回复    1970-01-01 08:00:00 +08:00
    cj1324
        1
    cj1324  
       2013-01-23 14:44:06 +08:00
    额 乱来。
    这样事情肯定是 mongodb 内置的mapreduce来做。 而且不应该是实时性的
    justfly
        2
    justfly  
    OP
       2013-01-23 15:24:07 +08:00
    @cj1324 我觉得这方法肯定上不得台面,我去看看,mongo的mapreduce文档去了,若有具体做法 还请不吝赐教哈 谢了
    lqs
        3
    lqs  
       2013-01-23 15:43:53 +08:00
    如果 db.synonyms 和 db.gloss 不大,先查出来存个dict变量,这样就不用在每次for都来查这两个表。

    另外mongodb的map-reduce只是一个用于公关宣传的功能。
    justfly
        4
    justfly  
    OP
       2013-01-23 15:54:01 +08:00
    @cj1324
    mongodb的map-reduce文档我看了,适用于单个collection的统计,我要从多个collection拉数据组成新数据结构,貌似有点不适合。

    @lqs
    两个标各有8W左右数据,大约几M大小。如果存dict变量的话,我怎么查啊,有linq?
    angeloce
        5
    angeloce  
       2013-01-23 16:25:23 +08:00   ❤️ 2
    @justfly

    lqs 说的没错, 你这种n+1次查询是性能大忌.
    16w 数据不多, 一般笔记本撑得住, 两个dict, conceptitem做key, synonymses 和 gloss_en 做value
    justfly
        6
    justfly  
    OP
       2013-01-23 16:58:37 +08:00
    @angeloce 感谢!按你的方法成功,速度提升接近100倍!长知识了,再次感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5005 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:43 · PVG 13:43 · LAX 21:43 · JFK 00:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.