LINUX.ORG.RU

1 соединение на N сеансов или N соединений на N cеансов

 


0

1

открываю для себя прелести Nginx API, но что-то затупил с вопросом в сабже.

есть приложение, которое исполняется при GET /s
в приложении очень активно используется база данных (Postgres)
к приложению идёт около 30-50 запросов в секунду (это где-то 3000-5000 запросов к БД)

что будет лучше для производительности?

а) при запуске nginx'а установить соединение с БД и не закрывать его, использовать это единственное соединение для абсолютно всех запросов
б) для каждого запроса устанавливать соединение в начале исполнения приложения и закрывать его в конце

желательно с объяснением, потому что кое-кто уже вторые сутки не спит и мало что соображает

★★★★★

очевидно же, нужно держать готовый пул соединений. Открытые нового соединения относительно дорогая операция для СУБД и особенно для PG.

mashina ★★★★★
()

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

pi11 ★★★★★
()

Одно-единственное соединение выдержит только определенную нагрузку. Нужно сделать несколько соединений к БД одновременно, и держать их сколько сможешь (а при падении переоткрывать), и распределять между ними нагрузку. Гугл Database Connection Pool

Открытие нового конекшена может занимать несколько секунд, а одна транзакция - доли секунды. Т.е. если нет возможности/желания городить пул, лучше сделать одно долгоживущее соединение.

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от mashina

Да. Но нужно иметь в виду что у персистентных конектов есть подводные камни. Это не фатальный недостаток, но всё-же лучше помнить об этом работая с ними.

Про возможные грабли рассказано например там:
http://profyclub.ru/docs/145

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

сли нет возможности/желания городить пул

apt-get install pgpool2

Открытие нового конекшена может занимать несколько секунд

Ну это загнул конечно. Если у тебя столько времени коннект занимает, значит сеть лежит.

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

на каком-то из облачных хостингов, кажись Хероку, на халявном аккаунте бд - постгрес на амазоне. Можно было поспать пока после конекшена транзакция начнет выполняться. Может и из-за сети, но у меня было ощущение что тормозит сам сервер из-за нагрузки (не дай бох зайти туда через pgadmin3 и кликнуть куда-нибудь не туда, сразу досвидос). Наверное, если у ТСа планируются сотни тысяч пользователей одновременно, поведение будет таким же.

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от MrClon

Про возможные грабли рассказано например там:

Пыхерам вообще живётся трудно в стране чудес - за каждым углом какая-то неожиданность.

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

Дык, каждый день новые интересные открытия, не соскучишься.

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