MongoDB: Как часто вы должны открывать и закрывать базу данных? Зачем?

Для каждого запроса я открывал базу данных, запрашивал, закрывал базу данных.

Я спорадически сталкивался с проблемой connection already opened.

Я закончил тем, что менял конфигурацию, чтобы просто открыть манго и держать ее открытой.

Каковы недостатки этого метода?

Спасибо!

(обратите внимание: используя node.js)

Ответы

Ответ 1

Мне кажется, что вы должны открыть соединение один раз и продолжать его повторно использовать, по крайней мере, с помощью node -native-driver. Комментарии к теме по разработчику драйвера найдены здесь: https://github.com/mongodb/node-mongodb-native/issues/84

Ответ 2

Ответ здесь будет зависеть от версии, в которой вы работаете. Метод, описанный на странице main github, включает открытие/закрытие соединения "по мере необходимости".

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

Учитывая, что документы предоставляют этот метод open/close, это, вероятно, путь. Это то, что я сейчас делаю в своих приложениях. Что касается проблемы, которую вы видите, это может быть просто ошибкой. Опять же, версия в драйвере равна < 1.0, и вчера была проверка, что-то похожее на то, что вы испытываете, поэтому могут возникнуть некоторые проблемы.

Изменить. Я должен добавить, что Христианин - отличный парень, который делает эту работу в свое время с ограниченной поддержкой от команды 10gen. Создание такого драйвера - это много и много работы, поэтому, если вы сталкиваетесь с ошибками, например, повторно используете открытые соединения, обязательно укажите ошибку и/или внесите исправление.

Ответ 3

Я не могу говорить за драйвер node.js, но Java-драйвер был разработан таким образом: http://www.mongodb.org/display/DOCS/Java+Driver+Concurrency - он обрабатывает соединения внутри. Возможно, драйвер node.js тоже. Возможно, стоит написать разработчикам драйверов по электронной почте?