цикл for в python блокируется при исполнении - PullRequest
0 голосов
/ 09 мая 2019

В этом коде я пытаюсь объединить 2 коллекции в mongodb

  • RM_Line содержит 10 000 строк
  • sflow содержит 18 476 321 строк

С помощью цикла for я вставляю результат агрегации в другую коллекцию, и он дает мне ровно 101 строку, после чего он просто блокируется во время выполнения без ошибки или остановки выполнения

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["myevo"]
mycol = mydb["RM_Line"]
pipeline = [{'$lookup': 
                {'from' : 'sflow',
                 'localField' : 'IP_Adress',
                 'foreignField' : 'srcaddr',
                 'as' : 'mergeipadr'}},
            {'$unwind': '$mergeipadr'}, 
            { "$addFields": { "_id": "$$REMOVE" } }
             ]
mycol2 = mydb["RMLine_Merge_sflow"] 
merge = mycol.aggregate(pipeline)
for doc in (merge):
     mycol2.insert_one(doc)

1 Ответ

0 голосов

Это может быть связано с нехваткой памяти.Стадии конвейера имеют ограничение 100 мегабайт ОЗУ

Чтобы разрешить обработку больших наборов данных, используйте параметр allowDiskUse , чтобы включить этапы конвейера агрегации для записи данных во временные файлы.
...