Как я могу ускорить обновление монго на проиндексированном поле? - PullRequest
0 голосов
/ 29 августа 2018

У меня есть база данных с около 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 МБ. Я не знаю, все ли это в оперативной памяти, но достаточно места для этого.

...