我在 mongodb-user 列表上问了同样的问题:http ://groups.google.com/group/mongodb-user/browse_thread/thread/b3470d6a867cd24
我希望这个论坛上的人可能有一些见解......
我进行了一个简单的实验,比较了使用 python 和 java 的游标迭代的性能,发现 python 实现慢了大约 10 倍。我希望有人能告诉我是否可以预料到这种差异,或者我是否在 python 方面做了一些明显低效的事情。
基准测试很简单:它执行查询,遍历游标,并检查每个文档中的相同字段。在 python 版本中,我每秒可以检查大约 22k 个文档。在 java 版本中,我每秒可以检查大约 220k 个文档。
我已经看到了一些关于 python 性能的类似问题,我接受了建议并确保我使用的是 C 扩展:
>>> import pymongo
>>> pymongo.has_c()
True
>>> import bson
>>> bson.has_c()
True
最后,我不认为这种差异是由于 python 和 java 之间的根本差异,至少在我的测试代码级别。例如,如果我将查询的文档存储在 python 列表中,我可以非常快速地遍历该列表。换句话说,造成差异的不是低效的python for循环。此外,在插入文档时,Java 与 Python 的性能几乎相同。
以下是有关查询的更多详细信息:
- python 和 java 实现都在同一个集合上使用相同的查询并在同一台机器上运行。
- 该集合包含大约 2000 万份文档。
- 该查询返回大约 200 万个文档,即我正在检索大约 10% 的集合。
- 每个文档包含三个简单的字段:一个日期和两个字符串。
- 查询是索引的,在实际查询中花费的时间对于 python 和 java 实现都可以忽略不计。游标迭代是运行时的原因。