PyMongo游标操作非常慢

时间:2015-11-06 22:43:49

标签: python mongodb pymongo

我是MongoDB和pyMongo的新手, 并且我遇到了一些性能问题 关于游标。

TL,DNR:我尝试执行的任何操作 使用游标大约需要一秒钟。

长版

我有一个小型数据库,我已经批量加载了。每个条目有3个字段:

dom:域名(唯一) 日期:日期,YYYYMMDD flag:string

我已经加载了大约190万个条目,没有发生任何事故,并且非常快。

我在dom字段上创建了一个哈希索引。

现在,我想通过域字段获取某些记录,并使用Python程序更新它们。

问题所在。

我使用的是最新的MongoDB和最新的pyMongo。

剥离计划......

import pymongo
from pymongo import MongoClient

db = client.myindexname
posts = db.posts

print list(db.profiles.index_information()) # shows hash index is present

for k in newdomainlist.keys():          #iterate list of domains to check
  ret = posts.find({"dom": k})          #this runs fine, and quickly 
                                        #'ret' is a cursor
  print ret                             #this runs quickly
  #Here's the problem
  print ret.count()                     #this takes about a second. why?

如果我只是打印ret',速度很好。但是,如果我尝试 在光标中引用任何,速度下降到地板 - 我 每秒可以做大约1次操作。

在这种情况下,我只是想看看ret.count()是否返回' 0' (我们不会 有这个域名),或者' 1' (我们已经有了)。

我尝试在查找中添加batch_size(10000),但没有帮助。

我已经加载了Python C扩展。

我到底做错了什么?

感谢

1 个答案:

答案 0 :(得分:1)

事实证明,我在错误的字段'collection'上创建了我的哈希索引,而不是'posts'。把它归结为mongodb缺乏经验。我们现在可以关闭这个,或者完全删除它。