2015-12-28 3 views
7

Я пытаюсь запустить несколько запросов mongodb через узел Async. Но они все еще требуют времени для запуска. База данных индексируется и полностью оптимизирована. Есть ли способ, с помощью которого я могу увеличить время выполнения запроса с помощью администратора mongodb ... или увеличить его производительность, выделив ему больше памяти.Mongodb параллельные запросы через nodejs

Запросы запускаются один за другим, когда я вижу на консоли. и некоторые из них слишком долго ... в результате чего нет ответа ..

2015-12-29T10:31:48.958-0800 I COMMAND [conn63] command consumers.$cmd command: count { count: "consumer1s", query: { ZIP: 37089, $or: [ { ADULTS_F_18_24: "Y" }, { ADULTS_F_24_35: "Y" } ] } } planSummary: IXSCAN { ZIP: 1.0, GENDER: 1.0 } keyUpdates:0 writeConflicts:0 numYields:1 reslen:44 locks:{ Global: { acquireCount: { r: 4 } }, MMAPV1Journal: { acquireCount: { r: 4 } }, Database: { acquireCount: { r: 2 } }, Collection: { acquireCount: { R: 2 }, acquireWaitCount: { R: 2 }, timeAcquiringMicros: { R: 54270 } } } 146ms 

2015-12-29T10:31:54.925-0800 I COMMAND [conn62] command consumers.$cmd command: count { count: "consumer1s", query: { ZIP: 37024, $or: [ { ADULTS_F_18_24: "Y" }, { ADULTS_F_24_35: "Y" } ] } } planSummary: IXSCAN { ZIP: 1.0, GENDER: 1.0 } keyUpdates:0 writeConflicts:0 numYields:88 reslen:44 locks:{ Global: { acquireCount: { r: 178 } }, MMAPV1Journal: { acquireCount: { r: 172 } }, Database: { acquireCount: { r: 89 } }, Collection: { acquireCount: { R: 89 }, acquireWaitCount: { R: 83 }, timeAcquiringMicros: { R: 1654781 } } } 6114ms 

Привета смотрите журналы, чтобы понять мой вопрос ... 2 запросов следующих же план .. большую разница во время выполнения ... Пожалуйста, расскажите мне причину и как ее исправить.

Следующие данные должны быть удобными. Я работаю над этим приложением в системе Macintosh. OSX Yosemite 10.10.2 Процессор 3,2 ГГц Intel Core i5. Память составляет 8 ГБ 1600 МГц DDR3. Любые предложения, как я могу выделить больше виртуальной памяти для mongodb

+2

Вам необходимо посмотреть ваши журналы и контролировать использование ресурсов во время запросов. Существует нет серебряного буллита для повышения эффективности запросов – Martin

+1

индексов ... –

+0

Это зависит от вашей реальной среды. Это высокий параллелизм или большие данные? Например, если это высокий уровень параллелизма, вам лучше использовать 'redis' или' memcached' или другие решения. Хотя, я также ищу оптимизацию mongodb ... – hirra

ответ

0

Как сказал @Martin, вам нужно профиль. Используйте что-то вроде cursor.explain, чтобы убедиться, что запрос использует индексы и найти слабые места. Используйте любой монитор ресурсов, который имеет ваша система (например, top/htop on linux), чтобы убедиться, что у него закончилась нехватка памяти или если она связана с процессором.

«Запросы запускаются один за другим» - я предполагаю, что вы не используете async.series или аналогичный, который является последовательным.

+0

Я использую async.parallel ... –

+0

Запросы никогда не связаны с ЦП, и я имею в виду никогда. Агрегации и огромные вставки - это, как правило, единственное, что требует интенсивного использования ЦП. Я выполнил много профилирования запросов, и запросы почти ничего не стоят перед процессором, если их огромное количество. В основном нет операторов для регулярных запросов, которые очень сложны, кроме геопространственного и текстового поиска. На самом деле только агрегаты собираются потреблять много CPU, и все же обычно на нижнем конце. – tsturzl

+0

Запуск в серии или параллельно не должен иметь заметной разницы, что-либо за пределами 200 мс для запроса относится к базовому запросу. Человек, который мог бы сработать параллельно, был бы довольно трудным для понимания человеком. Учитывая, что он, вероятно, лучше в производстве, если вы не используете 50 запросов параллельно, это может стать точкой для DoS в этом случае. Обычно я запускаю серию, когда обрабатываю массив неизвестного размера, в противном случае параллель, если я знаю, размер не будет превышать определенную сумму. Они оба служат цели. – tsturzl

Смежные вопросы