Надеюсь, что кто-то может помочь.
Мне нужно увеличить скорость массового обновления документов. Ниже приведен пример:
from motor.motor_asyncio import AsyncIOMotorClient
from pymongo import UpdateOne
def get_mongodb():
mongoClient = AsyncIOMotorClient(mongohost, mongoport)
mongoDb = mongoClient[mongodb]
mongoCo = mongoDb[mongocol]
return mongoCo,mongoDb,mongoClient
async def add_details(p):
mongoCo, mongoDb, mongoClient = get_mongodb()
req = [ UpdateOne({'iid': int(i['iid'])},
{"$addToSet": {
'Mdetails':
{
'details':i,
},
}
}, upsert=True ) for i in p['Items'] ]
mongoCo.bulk_write(req,ordered=False)
каждый вызов add_details для обновления 10-200 документов.
каждое обновление документа добавляет к Mdetails уникальный встроенный документ.
Работает довольно медленно (занимает почти столько же времени, сколько я делал отдельное обновление для каждого документа.)
Я думал о проблеме с $ addToSet (и, наконец, мне нужны уникальные значения только в Mdetails), для тестирования я изменяю его с помощью $ pu sh, это увеличивает скорость примерно на 20 ~ 30%, но все еще очень медленно, для обновления 10k документа требуется 3-4 минуты. Есть предложения?