У меня есть база данных с около 75 миллионами записей, и мой код перебирает их все и обновляет различную информацию. Когда информация обновляется, я устанавливаю поле flag
на true
. В конце сценария я хочу обновить их все до false
, чтобы он был готов к следующему циклу обновления. Мой код, который делает это в Python:
db.collection.update({'flag':True}, {'$set':{'flag':False}},multi=True)
Это работает, но очень медленно - примерно 1000 - 1500 обновлений в секунду, поэтому обновление всего занимает несколько часов. У меня есть индекс в поле flag
:
{
"v" : 2,
"key" : {
"flag" : 1
},
"name" : "flag_1",
"ns" : "collection.collection"
}
и подтвердил, что запрос использует его:
"planSummary" : "IXSCAN { flag: 1 }",
Что можно сделать, чтобы ускорить это? Написание необработанных данных не должно занять более нескольких минут.
Размер индекса индекса флага составляет около 300 МБ. Я не знаю, все ли это в оперативной памяти, но достаточно места для этого.