Запрос производительности MongoDB для более чем 5 миллионов записей

Мы'недавно ударил>2 миллиона записей для одной из наших основных коллекций, и теперь мы стали страдать из-за серьезных проблем с производительностью этой коллекции.

Эти документы в коллекции имеют около 8 полей, которые вы можете отфильтровать с помощью пользовательского интерфейса, и результаты должны быть отсортированы по полю отметки времени, в котором была обработана запись.

мы добавили несколько составных индексов с отфильтрованными полями и временной меткой, например: I '

db.events.ensureIndex({somefield: 1, timestamp:-1})

Мы также добавили несколько индексов для использования нескольких фильтров одновременно, чтобы надеяться на более высокую производительность. Но некоторые фильтры все еще работают ужасно долго.

мы убедились, что используя объяснение, что запросы используют индексы, которые яМы создали, но производительность все еще недостаточно хороша.

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

РЕДАКТИРОВАТЬ: пример для запроса:

> db.audit.find({'userAgent.deviceType': 'MOBILE', 'user.userName': {$in: ['[email protected]']}}).sort({timestamp: -1}).limit(25).explain()
{
        "cursor" : "BtreeCursor user.userName_1_timestamp_-1",
        "isMultiKey" : false,
        "n" : 0,
        "nscannedObjects" : 30060,
        "nscanned" : 30060,
        "nscannedObjectsAllPlans" : 120241,
        "nscannedAllPlans" : 120241,
        "scanAndOrder" : false,
        "indexOnly" : false,
        "nYields" : 1,
        "nChunkSkips" : 0,
        "millis" : 26495,
        "indexBounds" : {
                "user.userName" : [
                        [
                                "[email protected]",
                                "[email protected]"
                        ]
                ],
                "timestamp" : [
                        [
                                {
                                        "$maxElement" : 1
                                },
                                {
                                        "$minElement" : 1
                                }
                        ]
                ]
        },
        "server" : "yarin:27017"
}

пожалуйста, обратите внимание, что deviceType имеет только 2 значения в моей коллекции.

Ответы на вопрос(3)

Ваш ответ на вопрос