我正在尝试测试mongodb的性能,但在理解mongodb如何执行查询,特别是完成查询所需的时间方面,我遇到了一些问题。
如果我运行以下代码:
import pymongo
#Connect to the database
client = MongoClient("mongodb://.../testrecords")
db = client.testrecords
start = datetime.datetime.now()
result = db.threads.find( {"$and": [{ "location" : "JC018" }, {"timestamp": "2018-03-22T23:05:15+00:00"} ] } ).explain()
endtime = datetime.datetime.now()
print ("duration: " + str(endtime-start))
print(result)
我收到以下输出:
duration: 0:00:00.531754
。我还得到了
explanation()
提供以下信息的函数
executionTimeMillis': 249
这很有意义,因为mongodb执行查询所用的时间少于往返时间。
但是,如果我使用以下循环将同一查询运行10000次,则执行持续时间始终记录在200到300毫秒之间。(请注意,我已删除
explain()
致电。)
我看不出运行查询10000次怎么会导致执行时间没有明显增加。
for i in range(10000):
result = db.threads.find( {"$and": [{ "location" : "JC018" }, {"timestamp": "2018-03-22T23:05:15+00:00"} ] } )
但是,如果我使用
解释()
函数执行循环似乎需要大约n*250ms的时间。
for i in range(n):
result = db.threads.find( {"$and": [{ "location" : "JC018" }, {"timestamp": "2018-03-22T23:05:15+00:00"} ] } )
有人能解释一下执行查询一次和执行查询10000次之间没有时间差,为什么向循环中添加explain()函数会导致预期的执行时间?
我认为可能存在某种缓存,但我只在客户端使用PyMongo,在文档中找不到任何提及。
谢谢