Составная индексация MongoDB + множественные индексы + пересечение индексов - PullRequest
0 голосов
/ 06 мая 2018

Итак, я использую MongoDB 3.6 для хранения своих данных. Схема коллекции выглядит следующим образом.

{
    enabled: Boolean,
    opening_hours: {
        0: [{
            from: Number,
            until: Number
        }],
        1: [{
            from: Number,
            until: Number
        }],
        ...
        6: [{
            from: Number,
            until: Number
        }],
    },
    opening_exceptions: [{
        from: Date,
        until: Date
    }],
    opening_whitelist: [{
        from: Date,
        until: Date
    }],
    category: String,
    payment_methods: [String]
}

Мои запросы выглядят следующим образом:

{
   "enabled":true,
   "$or":[{
        "opening_hours.5": {
            "$elemMatch": {
                "from": { "$lte":698 },
                "until": { "$gte":698 }
            }
        }
    }, {
        "opening_whitelist": {
            "$elemMatch": {
                "from": { "$lte":new Date(1525444711573) },
                "until": { "$gte":new Date(1525444711573) }
            }
        }
    }],
    "opening_exceptions": {
        "$not": {
            "$elemMatch": {
                "from": { "$lte":new Date(1525444711573) },
                "until": { "$gte":new Date(1525444711573) }
            }
        }
    },
    "category": { $in: ["Tecno"] },
    "payment_methods": { $in: ["visa"] }
}

Поля category и payment_methods иногда присутствуют в запросе, а также $or и opening_exceptions.

Этот запрос должен выполняться максимально быстро, поэтому я пытаюсь проиндексировать коллекцию. Я прочитал большинство документов MongoDB, доступных по индексированию (составное индексирование, множественные индексы, использующие преимущества пересечения индексов). Тем не менее, MongoDB не поддерживает индексирование параллельных массивов (по многим причинам), и хотя я пытался создать индекс для каждой комбинации запроса, Mongo, похоже, не использует преимущества (просматривая cursor.explain() выходы) адекватного индекс.

Есть какие-нибудь идеи о том, как проиндексировать эту коллекцию для получения максимальной производительности по запросу?

Может быть, добавить в схему некоторые метаданные для индексации?

Спасибо !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...