0

ベクトルのコレクションがありますコレクションのサイズ

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'カーソル':u' BasicCursor'、u'indexBounds':{}}]、u'nChunkSkips':0、u'ミリ秒':23、u 'n':102020、u'カーソル':u'BasicCursor'、u'indexBounds':{}、u'nscannedObjects':102020、u'isMultiKey':False、u'indexOnly':False、u'nscanned': 102020}

なぜこんなに大きな時差があるのですか?これをスピードアップする方法はありますか?すべてのベクターをSQLDBテキストフィールドにロードしましたが、同じクエリは1秒未満でした。ありがとう

4

3 に答える 3

1

私の推測では、2 つ目は単に mongoDB が実際に「find」を実行するのにかかる速度を示しているだけであり、前者はすべてのレコードをコンソールに取得して処理することも含まれていると思います。

于 2012-08-01T10:42:52.553 に答える
0

結果を反復処理するときに、 batch_sizeを試して速度を向上させ、ネットワークホップの量を減らすことをお勧めします。

start = time.time()
for v in vectors.find({},{'vector' : 1, '_id' : 0}).batch_size(1000):
    pass
print "total time:" , end-start
于 2012-08-01T10:32:25.243 に答える
0

クエリするフィールドにインデックスを提供できます。あなたの場合は次のようになります"vector"

vectors.createIndex({"vector":1},{sparse:true})

その後、クエリの時間を確認できます。

于 2016-07-04T10:34:22.483 に答える