Я изучал представление mongodb. У меня есть коллекция из 500 миллионов документов. Я создал два индекса:mongodb - счет улучшает производительность
db.appels.createIndex({OPERATEUR_RECEVEUR:1});
db.appels.createIndex({DUREE_APPEL:1});
счетчик на поле, быстро:
15 секунд:
db.appels.find ({ "DUREE_APPEL" : { "$gt" : 42 } }).count();
2 секунды:
db.appels.find({OPERATEUR_RECEVEUR:"MTN"}).count();
Но рассчитывать на два поля с «и» медленно:
7 минут:
db.appels.find ({ $and : [ { "DUREE_APPEL" : { "$gt" : 42 } }, {OPERATEUR_RECEVEUR:"MTN"} ] }).count();
(Это то же самое время, без индекса поля)
Наконец, рассчитывают на двух полей с «или» невозможно:
15 часов и убить запрос:
db.appels.find ({ $or : [ { "DUREE_APPEL" : { "$gt" : 42 } }, {OPERATEUR_RECEVEUR:"MTN"} ] }).count();
Я не могу использовать мультииндекс, потому что у меня есть 100 столбцов. Я использую 1 узел с debian 8, 2 SSD, 80 Go Ram, 12 Cpu, mongodb 2.4. Как я могу улучшить скорость?
Почему вы не можете создать индекс на двух полях? В вашем случае DUREE_APPEL и OPERATEUR_RECEVEUR. См. Https://docs.mongodb.com/manual/core/index-compound/ – Saleem
Благодарим вас за ответ. Я не знаю заранее, какой запрос или сколько полей будет использовано (иногда 1, иногда 2, .., ..., иногда 10). Запрос динамически генерируется в соответствии с выбором конечного пользователя в веб-интерфейсе. Если у меня есть 100 столбцов, у меня есть тысячи индексов для создания. –
Ну, если вы не знаете заранее, я бы предложил создать индекс для каждого поля. Я знаю, что ваши индексы будут использовать дополнительные ресурсы, но увеличит пользовательский интерфейс, быстро вернув данные. – Saleem