Python + MongoDB - 游标迭代太慢了

Mar*_*oni 9 python iteration performance cursor mongodb

我实际上是在搜索引擎项目中工作.
我们正在使用python + mongoDb.
我遇到以下问题:

在对mongo db执行find()命令后,我有一个pymongo游标.
pymongo游标有大约20k的结果.

我注意到,与正常迭代相比,pymongo游标上的迭代非常慢,例如相同大小的列表.

我做了一点基准测试:

-iteration在20k字符串列表中:0.001492秒
- 在pymongo光标上获得20k结果:1.445343秒

差别真的很大.这个数量的结果可能不是问题,但如果我有数百万的结果,那么时间将是不可接受的.

有没有人知道为什么pymongo游标太慢而不能迭代?
我知道如何在更短的时间内迭代光标?

一些额外的信息:

  • Python v2.6
  • PyMongo v1.9
  • MongoDB v1.6 32位

Chu*_*uck 14

你的pymongo安装是否使用附带的C扩展

>>> import pymongo
>>> pymongo.has_c()
True
Run Code Online (Sandbox Code Playgroud)

我上周大部分时间都在尝试调试中等大小的查询以及需要20秒才能运行的相应处理.一旦安装了C扩展,整个相同的过程大约需要一秒钟.

要在Debian中安装C扩展,请在运行easy install之前安装python开发头文件.在我的情况下,我还必须删除旧版本的pymongo.请注意,这将从C编译二进制文件,因此您需要所有常用工具.(海湾合作委员会等)

# on ubuntu with pip
$ sudo pip uninstall pymongo
$ sudo apt-get install python-dev build-essential
$ sudo pip install pymongo
Run Code Online (Sandbox Code Playgroud)


Bre*_*ams 11

请记住,pymongo驱动程序不会一次性返回所有20k结果.当您迭代时,它正在对mongodb后端进行网络调用以获取更多项目.当然它不会像字符串列表一样快.但是,我建议尝试调整api文档中概述的游标batch_size :

  • 答案中的链接不起作用..请更新它。 (2认同)