Python pymongo在游标上的迭代速度慢得不合理 上下文

Python pymongo在游标上的迭代速度慢得不合理 上下文,python,mongodb,Python,Mongodb,我有一个mongo数据库,它有一个名为documents的集合。这个集合有436333个条目,我必须对每个条目进行一些操作。我的代码是: client=MongoClient() db=客户端[“数据库”] documents=db.documents.find() 偏差={ “title”:pd.DataFrame(index=POS_标记,dtype=np.int32), “摘要”:pd.DataFrame(index=POS_标记,dtype=np.int32), “title\u abs

我有一个mongo数据库,它有一个名为documents的集合。这个集合有436333个条目,我必须对每个条目进行一些操作。我的代码是:

client=MongoClient()
db=客户端[“数据库”]
documents=db.documents.find()
偏差={
“title”:pd.DataFrame(index=POS_标记,dtype=np.int32),
“摘要”:pd.DataFrame(index=POS_标记,dtype=np.int32),
“title\u abstract”:pd.DataFrame(index=POS\u TAGS,dtype=np.int32)}
对于i,枚举中的文档(文档):
pos_tags=doc['agg_pos_tagging']
对于pos_tags.items()中的k、v:
如果len(v)!=0:
偏差[k]。loc[:,doc[“id”]=\
pd.系列(匹配值(v),索引=位置标签)
其他:
偏差[k]。loc[:,doc[“id”]=\
pd.系列([0]*len(位置标签),索引=位置标签)
如果i%10000==0:
logging.info(“{0}文件已添加”。格式(i))
我有CentOS 6.7和mongodb 2.6。我使用的是python 3.4、pymongo 3.2.2(安装了c扩展)和pandas 0.18.0。程序和服务器在同一台机器上。集合将根据其id编制索引

问题 问题是,每次10000个条目的chunck传递所需的时间随着检索的行数的增加而增加。这是日志:

2016-06-12 16:11:17,016 : INFO : 0 docs added
2016-06-12 16:13:45,553 : INFO : 10000 docs added
2016-06-12 16:17:47,117 : INFO : 20000 docs added
2016-06-12 16:23:14,786 : INFO : 30000 docs added
2016-06-12 16:29:40,412 : INFO : 40000 docs added
2016-06-12 16:38:11,807 : INFO : 50000 docs added
2016-06-12 16:50:38,987 : INFO : 60000 docs added
2016-06-12 17:04:19,188 : INFO : 70000 docs added
2016-06-12 17:18:21,669 : INFO : 80000 docs added
2016-06-12 17:34:18,687 : INFO : 90000 docs added
2016-06-12 17:53:11,497 : INFO : 100000 docs added
2016-06-12 18:18:57,503 : INFO : 110000 docs added
2016-06-12 18:51:33,503 : INFO : 120000 docs added
2016-06-12 19:24:47,799 : INFO : 130000 docs added
2016-06-12 19:57:40,690 : INFO : 140000 docs added
2016-06-12 20:31:44,103 : INFO : 150000 docs added
2016-06-12 21:10:24,900 : INFO : 160000 docs added
2016-06-12 22:02:46,849 : INFO : 170000 docs added
2016-06-12 22:57:50,108 : INFO : 180000 docs added
2016-06-12 23:55:52,541 : INFO : 190000 docs added
2016-06-13 00:56:43,676 : INFO : 200000 docs added
2016-06-13 02:07:39,460 : INFO : 210000 docs added
2016-06-13 03:22:43,074 : INFO : 220000 docs added
2016-06-13 04:40:00,819 : INFO : 230000 docs added
2016-06-13 06:05:09,572 : INFO : 240000 docs added
2016-06-13 07:27:09,148 : INFO : 250000 docs added
2016-06-13 08:58:45,093 : INFO : 260000 docs added
2016-06-13 10:13:26,832 : INFO : 270000 docs added
2016-06-13 11:30:29,821 : INFO : 280000 docs added
2016-06-13 12:53:54,008 : INFO : 290000 docs added
2016-06-13 14:20:45,617 : INFO : 300000 docs added
2016-06-13 16:01:00,446 : INFO : 310000 docs added
2016-06-13 17:40:26,558 : INFO : 320000 docs added
2016-06-13 19:30:14,056 : INFO : 330000 docs added
2016-06-13 21:19:33,698 : INFO : 340000 docs added
2016-06-13 23:10:49,665 : INFO : 350000 docs added
将文档340000添加到350000几乎需要两个小时,但添加前10000只需要2分钟

我认为计算没有问题。对于10000件物品,每件物品所需的时间大致相同。我查看了数据库的日志文件,但它没有显示所有的
getMore
操作(我添加了所有nreturns,它与检索到的文档数量不一致),因此我不知道是否应该信任它

我尝试将
光标类型
更改为
排气
,但结果没有改变

我能做些什么使它更快

编辑 我在没有任何计算的情况下运行代码,到目前为止我得到了这个

2016-06-14 15:43:19,263 : INFO : 0 docs added
2016-06-14 15:43:23,488 : INFO : 10000 docs added
2016-06-14 15:43:27,532 : INFO : 20000 docs added
2016-06-14 15:43:32,112 : INFO : 30000 docs added
2016-06-14 15:43:36,098 : INFO : 40000 docs added
2016-06-14 15:44:13,818 : INFO : 50000 docs added
2016-06-14 15:44:52,624 : INFO : 60000 docs added
2016-06-14 15:45:48,415 : INFO : 70000 docs added
2016-06-14 15:47:10,645 : INFO : 80000 docs added
2016-06-14 15:48:26,565 : INFO : 90000 docs added
2016-06-14 15:48:57,270 : INFO : 100000 docs added
2016-06-14 15:49:52,323 : INFO : 110000 docs added
2016-06-14 15:51:22,808 : INFO : 120000 docs added
2016-06-14 15:53:30,554 : INFO : 130000 docs added
2016-06-14 15:55:31,960 : INFO : 140000 docs added

随着时间的推移,仍然存在一些滞后现象

你说“我认为计算没有问题”,但你需要证明这一点才能确定。所以,注释掉所有的计算,看看简单地枚举所有文档需要多长时间。我只是运行代码,没有任何计算。虽然不需要那么长时间,但仍然有一些滞后。我把结果放在问题里