LINUX.ORG.RU

Как правильно организовать работу с mongodb в nodejs?

 , , ,


0

1

Добрый день.

В nodejs+mongodb (планирую использовать mongodb-native) правда принято каждый запрос (web) по новой подключаться к базе данных? Не слишком большой оверхед ли?

Или по факту это не является новым подключением? (mongodb-native — хитрая обёртка?)

Как правильно организовать работу с mongodb в nodejs+express? Нужен ли пул подключений?

★★

каждый запрос (web) по новой подключаться к базе данных

Рекомендую проверить через netstat в каком состоянии остаются соединения. В перловом MongoDB::Async они остаются в TIMEWAIT (2 минуты) и легко достигают лимита по ulimit.

В остальном mongo пофиг на это, т.к. страдает прежде всего клиентское приложение. Следовательно, если у тебя будет 100 тыс. таких соединений в сек. придется пересмотреть архитектуру приложения.

Нужен ли пул подключений?

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

gh0stwizard ★★★★★ ()
Ответ на: комментарий от gh0stwizard

Спасибо. Сам рассуждал в этом направлении. Но смущает рекомендация не создавать глобальные переменные в nodejs и вот это http://stackoverflow.com/questions/10656574/how-to-manage-mongodb-connections-in-a-nodejs-webapp.

Y ★★ ()
Последнее исправление: Y (всего исправлений: 1)

Пытаюсь найти какой-нибудь проект на github, попадаются либо синтетические примеры, либо использующие mongoose. Мне не пойдёт, ибо он работает со schema, а мне надо в одной коллекции хранить данные разной структуры и производить по всем выборку.

Y ★★ ()

Мне сказали, что что бы стать настоящим эрлангистом надо в этом треде написать что-то плохое. Это правда?

nanoolinux ★★★★ ()
Ответ на: комментарий от Y

Но смущает рекомендация не создавать глобальные переменные в nodejs

Запихни пул в какой-нибудь объект и таскай с собой, в чем проблема?

и вот это

Странные у них рассуждения. Один коннект == одна сессия из множества запросов. Естественно, можно спроектировать так, что у тебя каждый запрос обрабатывается асинхронно для какой-то мизерной части... но такое редко бывает. По крайне мере это не ускоряет ни загрузку, ни снижает нагрузку при постоянной средней нагрузке (быстрее != меньше жрет ресурсов). Фишка в том, что на сериализацию/десериализацию (если nodejs это вообще требуется, bson <-> json) жрется cpu. Количество ядер/процессоров всегда ограничено несколько штуками => при числе одновременных соединений больше чем ядер производительность не увеличивается, а даже уменьшается.

В моих приложениях пул один, при этом каждое соединение выполняет свою конкретную задачу. Например, одно соединение читает, другое пишет данные (но таких «обработчиков» одновременно может быть несколько).

Проблема драйвера/протокола mongo в том, что в рамках одного соединения в единицу времени может выполняться только один запрос. Однако, запросов может быть множество, но выполняются они все последовательно. Это просто надо учитывать.

Может найдется спец по nodejs, который расскажет детали, но принцип везде одинаков.

gh0stwizard ★★★★★ ()
Ответ на: комментарий от gh0stwizard

Спасибо. Тоже был удивлён их рассуждениями.

Запихни пул в какой-нибудь объект и таскай с собой, в чем проблема?

Проблема с реализацией этого дела согласно канонам nodejs.

Жду спеца)

Y ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.