我在mongodb用户列表上问了同样的问题: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的性能几乎相同。
以下是有关查询的更多详细信息:
最佳答案
同样,也请查看您在Google网上论坛上的帖子,这是我的2c:
“结果令人惊讶的是Python基准测试如何
当插入较短的值时,性能会下降。如果有的话,我
本来是相反的。比较而言,Java编号是
长字符串和短字符串基本相同”。
由于Mongo在写入时的异步行为,这可能会产生误导。确保在Java和Python基准测试中触发写入时设置相同的写入问题(最好将其设置为SAFE_MODE)。换句话说,如果您没有专门设置任何写入问题,请确保在Python和Java变体中驱动程序的默认值都相同。