Я вытаскиваю данные из коллекции в Meteor/MongoDB. Всего около 15 000 документов, и запрос тянет примерно половину из них (8 100). Захват (прежде чем что-либо с ним делать) занимает 5-7 секунд, как сообщает Кадира.Действительно медленный выбор в Метеор
Есть индексы в соответствующих полях, и я могу запустить find() в 20-50 мс - так что это выборка, это проблема, а не находка. И на этот раз исключает фактически что-либо с документами - это просто find().
Каждый документ содержит около десятка полей, в основном короткие (< 30 символов) строки с парой ISODates и пару массивов из 1-2 строк. В общем, общий набор данных (все 8000 записей) составляет около 5 мегабайт.
Все это на сервере - ничто не отправляется клиенту.
Является ли это продолжительностью нормальной? Если нет, что я могу сделать, чтобы ускорить его?
Если вы запускаете тот же запрос, возвращая такое же количество документов, используя mongodb cli, вы получаете такую же продолжительность? Это может быть медленное соединение на одном конце, а не проблема с методом выборки. –
1. Уменьшите количество полей, которые вы публикуете, 2. Уменьшите количество документов, которые вы публикуете одновременно (действительно ли вам нужны все 8k-документы на клиенте?) 3. Если вы выполняете агрегацию на сервер какого-либо типа использует структуру агрегации mongo и позволяет db выполнять работу напрямую, 4. Solid State Disks! –
@ michel-floyd: Это все на сервере - ничего не публикуется клиенту. Это часть процедуры, которая поддерживает некоторые пользовательские отчеты. Сервер принимает параметры отчета от клиента (какие коллекции, поля и т. Д.), А затем эффективно объединяет коллекцию. Затем результат поступает в коллекцию, которая отправляется клиенту по частям. Эта часть работает отлично. Похоже, мне, возможно, понадобится перестроить все это, но я никогда бы не подумал, что вытащить 5 мегабайт данных в память на сервере займет так много времени. –