mongodb查找执行时间

时间:2018-03-26 16:53:00

标签: python mongodb pymongo

我正在尝试对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执行查询所花费的时间少于往返时间。

但是,如果我使用以下循环运行相同的查询10,000次,则执行持续时间始终记录在200到300毫秒之间。 (请注意,我已删除了explain()来电。) 我没有看到如何运行10,000次查询会导致执行时间没有显着增加。

for i in range(10000):
    result = db.threads.find( {"$and": [{ "location" : "JC018" }, {"timestamp": "2018-03-22T23:05:15+00:00"}  ] } )

但是,如果我使用explain()函数运行循环,它似乎需要大约n * 250ms才能执行循环。

for i in range(n):
    result = db.threads.find( {"$and": [{ "location" : "JC018" }, {"timestamp": "2018-03-22T23:05:15+00:00"}  ] } )

任何人都可以解释一次执行查询并执行10,000次时缺少时间差异以及为什么在循环中添加explain()函数会导致预期的执行时间?

我认为可能会有某种缓存,但我只在客户端使用PyMongo,在文档中找不到任何提及。

由于

1 个答案:

答案 0 :(得分:0)

因此,经过更多的研究,我发现查询没有返回数据库中的所有结果,它返回前100条记录和Cursor对象,它是对结果集的引用,可以迭代。

因此,要实际从数据库中获取所有结果,可以使用以下代码:

results = []

for doc in db.threads.find( { "timestamp": { "$gt": "2018-02-20T20:08:00+00:00", "$lt": "2018-02-20T22:54:42.3+00:00"} } ):
    results.append(doc)