我在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相比几乎相同的性能。
以下是有关查询的更多详细信息:
答案 0 :(得分:2)
好好查看Google网上论坛上的帖子,这是我的2c:
Python比Java慢。由于Python没有输入,它的解释器无法完成所有Java JIT的“魔术”,因此它在运行时总是会变慢。
在Google网上论坛帖子中声明:
“结果的大惊喜是Python基准测试 当我插入较短的值时,性能降级。如果有的话,我 本来预料到了相反的结果。相比之下,Java数字是 对于长字符串和短字符串基本相同“。
由于Mongo在写入时的异步行为,这可能会产生误导。当您在Java和Python基准测试中触发这些写入时(确保将其设置为SAFE_MODE),请确保设置相同的写入关注点。换句话说,如果您没有专门设置任何Write Concern,请确保Python和Java变体中的驱动程序默认值相同。