MongoDb查询耗时较长
我有一组向量 集合的大小MongoDb查询耗时较长,mongodb,optimization,indexing,Mongodb,Optimization,Indexing,我有一组向量 集合的大小 print vectors.count() 是 102020 当我遍历字段时 start = time.time() for v in vectors.find({},{'vector' : 1, '_id' : 0}): pass print "total time:" , end-start 总时间:5.05100011826 但是当我使用explain()运行时,我发现查询花费的时间大大减少 print vectors.find({},{'vector
print vectors.count()
是
102020
当我遍历字段时
start = time.time()
for v in vectors.find({},{'vector' : 1, '_id' : 0}):
pass
print "total time:" , end-start
总时间:5.05100011826
但是当我使用explain()运行时,我发现查询花费的时间大大减少
print vectors.find({},{'vector' : 1, '_id' : 0}).explain()
{u'nYields':0,u'allPlans':[{u'cursor':u'BasicCursor',u'indexBounds':{}],u'nchunkspips':0,u'millis':23,u'n':102020,u'cursor':u'BasicCursor',u'indexBounds':{},u'nscannedObjects':102020,u'isMultiKey':False,u'indexOnly':False,u'nscanned':102020}
为什么会有这么大的时差?有没有办法加快速度?
我将所有向量加载到一个sql DB文本字段,同一个查询不到一秒钟。
谢谢在迭代结果时,您可能希望使用它来提高速度并减少网络跳数
start = time.time()
for v in vectors.find({},{'vector' : 1, '_id' : 0}).batch_size(1000):
pass
print "total time:" , end-start
我的猜测是,第二个示例仅显示mongoDB实际执行“查找”所需的速度,而前者还包括检索控制台中的每一条记录,并对其进行处理。您可以为要查询的字段提供索引,在您的示例中,它是
“vector”
,即:
vectors.createIndex({"vector":1},{sparse:true})
然后您可以检查查询的时间。不是time.time(),单位为毫秒。。正常的查询需要5毫秒和23毫秒的解释?我试过了,即使批量大于我的记录集,我的性能也很糟糕。是否可以将整个数据库加载到内存中?数据都在虚拟内存中,因此通过触摸文件,可以将所有数据都放入ram中。这可能只是传输数据然后进行迭代的成本。