MongoDB Оптимальная производительность - сколько постоянных подключений - PullRequest
3 голосов
/ 14 сентября 2011

У меня есть сервер mongodb, работающий на экземпляре EC2. Согласно официальной документации mongodb, постоянные соединения с БД должны ВСЕГДА использоваться в производстве. Я экспериментировал с примерно 50 постоянными соединениями и получал частые ошибки соединения (примерно в 33% случаев) во время тестирования. Я использую этот код:

$pid = 'db_'.rand(1,50);
$mongo = new Mongo("mongodb://{$user}:{$pass}@{$host}", array('persist' => $pid) );

Некоторая справка о приложении, это приложение отслеживания ссылок, которое все еще набирает обороты - и находится в диапазоне 500 - 1 тыс. Записей в час, ничего особенного ... пока.

Мне интересно, нужно ли мне просто разрешить более постоянные соединения? Как определить правильный баланс постоянных соединений и доступных ресурсов сервера?

Заранее всем спасибо.

Ответы [ 3 ]

5 голосов
/ 15 сентября 2011

Значение persist равно , больше не поддерживается с самой последней версии драйвера (1.2.0).

По правде говоря, никогда не было ясно, что он делал в типичных установках Apache + PHP. Есть несколько комментариев в группах Google и в других местах с просьбой о подробностях, но у меня нет никаких доказательств того, что persist или persistent когда-либо тестировались с какой-либо глубиной.

Вместо этого все это было заменено пулами подключений "из коробки". Пул соединений, очевидно, претерпел некоторые изменения в строке 1.2 с добавлением класса MongoPool .

Пока нет подробного объяснения того, как пул работает с Apache, но, по крайней мере, вам не нужно беспокоиться о persist.

Теперь, несмотря на весь этот беспорядок, я в 1000 раз обработал этот трафик на одном сервере MongoDB через драйвер PHP без особых проблем с подключением.

Вы ловите исключения?

Можете ли вы предоставить более подробную информацию о точном исключении?

Возможно, существует кодовое решение.

1 голос
/ 15 сентября 2011

Открываете ли вы новое соединение для каждого запроса страницы PHP или используете пул соединений с 50 постоянными соединениями? Если вы открываете новое соединение каждый раз, возможно, у вас быстро заканчиваются ресурсы.

Каждое соединение использует дополнительный поток на сервере, так что вы можете установить ограничение на количество потоков сетевых подключений, проверьте журналы сервера на /var/lib/mongodb на наличие ошибок.

Если вы используете официальный PHP-драйвер MongoDB , то, насколько я знаю, он должен автоматически обрабатывать пулы соединений. Если вы подключаетесь к Mongo из 50 отдельных клиентов, рассмотрите возможность размещения очереди перед Mongo для буферизации записей.

0 голосов
/ 16 ноября 2011

http://php.net/manual/en/mongo.connecting.php

без постоянных подключений x1000

Выполнение

занимает приблизительно 18 секунд.

Стойкие

... это занимает меньше, чем 0,02 секунды

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...