【发布时间】:2011-07-25 17:15:42
【问题描述】:
我实际上正在从事一个搜索引擎项目。我们正在使用 python + mongoDb。
在对 mongo db 执行 find() 命令后,我有一个 pymongo 光标。 pymongo 游标有大约 20k 个结果。
我注意到 pymongo 光标上的迭代与普通迭代相比非常慢,例如相同大小的列表。
我做了一个小基准测试:
- 20k 字符串列表的迭代:0.001492 秒
- 在 pymongo 游标上迭代,结果为 20k:1.445343 秒
差别真的很大。这么多结果可能不是问题,但如果我有数百万个结果,时间将是不可接受的。
有没有人知道为什么 pymongo 游标太慢而无法迭代? 知道如何在更短的时间内迭代光标吗?
一些额外的信息:
- Python v2.6
- PyMongo v1.9
- MongoDB v1.6 32 位
【问题讨论】:
-
你能改变你的应用程序的逻辑——例如使用
.skip()和.limit()——这样你就不会返回这么大的结果集吗? -
事实上,20k 只占文档总量的一小部分。我认为这不是一个可扩展的解决方案,因为我希望得到比 20k 更多的结果。无论如何谢谢=)。
-
您的每个结果都是裸字符串吗?
-
没有。我有一个类似的文档: {"something": "string", "other": [{"key", "value"},{"key2": "value2"},...], "something_more":整数}。无论如何,我最近尝试使用一组裸字符串文档,将其链接:{“something”:“string”},迭代时间的差异是相同的。 :S
标签: python mongodb performance iteration database-cursor