Mongodb游标迭代慢



我正在从mongodb中查询总共有100M +记录的块数据。然后想在一个函数中处理这些记录。

我查询

cursor = collection.find({'facial_task':False}).sort("_id", -1).skip(1000000).limit(10000) 

当我迭代cursor时,即使我将结果的数量限制为10,它也会花费太多时间并且会卡住很多。我甚至检索了使用批大小的结果,但当处理它的循环;这太费时间了。

我的循环是这样的

for dd in cursor:
ab = threading.Thread(target=insert_func, args=(dd,)) 
ab.start()
main_threads.append(ab)
if len(main_threads) >= 5000:
print("****Joining Main Thread***")
for ii in main_threads:
ii.join()
main_threads = []

如果从第一次迭代开始就出现减速,那么它一定与游标本身有关。

Mongodb游标不像一个'缓存'的整个集合的列表;当您遍历数据库时,它每次查询一个数据块。您可以尝试将该游标强制转换为列表,并查看迭代是否显示出明显的加速。

最新更新