У меня есть коллекция в MongoDB, содержащая около 2 миллионов документов. Средний размер документа составляет 28 КБ. Есть несколько полей, но нас интересуют три поля, а именно: «время», «test_time» и «arr». «time» — это строковое поле, в котором хранится дата и время в строковом формате, «test_time» — это поле даты, в котором сохраняются точно такие же дата и время в формате даты. «arr» — это массив объектов примерно по 10 полей в каждом объекте. Средняя длина «обр» ~5. Нас интересует только одно из этих полей, называемое "name", поэтому в основном arr.name
Конвейер выглядит следующим образом:
этап сопоставления поля "time" с значениями больше и меньше некоторого определенного даты X и Y. После этого поле проекции проецируется только {arr.name:1, _id:0}
В другом сценарии я запускаю тот же конвейер, но вместо «времени» мы используйте «test_time». Тот же прогноз, что и выше.
Q1. Я не вижу изменения скорости при поиске ранжированных запросов в поле STRING и поле DATE. Я полагаю, что поиск по типу даты в MongoDB будет более быстрым. Не могли бы вы помочь мне выяснить, почему это могло быть так?
Вопрос 2. У меня есть следующие индексы - time_1, test_time_1, time_1_arr.name_1 и test_time_1_arr.name_1
По умолчанию mongodb использует индекс time_1 или test_time_1, а не составные индексы с arr.name. Я понимаю, что это не охватываемый запрос, поскольку в моем условии совпадения есть только условие совпадения в поле времени, а не в поле имени. Я не уверен, как сделать это закрытым запросом, чтобы он мог выполняться намного быстрее.
В настоящее время docsExamined =keysExamined = nReturned, что означает, что он выполняет чтение с диска для проверки документов. Есть ли способ оптимизировать это?
Чтобы получить около 35 000 документов, требуется около 6 секунд, что кажется много, учитывая, что я проецирую только одно поле arr.name и один размер документа. составляет ~28 КБ. Я также понимаю, что конвейеру агрегации по умолчанию выделяется только 100 МБ ОЗУ, так как я могу использовать ОЗУ моей машины для полной оптимизации.
Подробнее здесь: https://stackoverflow.com/questions/790 ... hing-speed