Задать вопрос

Как лучше обращаться к базе?

Держать одно соединение или постоянно подключаться и после выполнения отключаться? Пул соединений createPool не дает результата если все потоки были отключены, и сами потоки не переподключаются.
Если рассматривать аналогию с php, то там каждый запрос отправляется с новым подключением к базе.
На сколько целесообразно "пытаться" держать соединение, или все же просто по аналогии с php? Вопрос именно про эффективность и ресурсах ОЗУ/ЦПУ.
  • Вопрос задан
  • 677 просмотров
Подписаться 5 Простой Комментировать
Ответ пользователя N К ответам на вопрос (2)
Fernus
@Fernus
Техник - Механик :)
Вы можете использовать это как грубый «набор правил»:

YES , использовать постоянные соединения, если:

  • Есть только несколько приложений/пользователей, обращающихся к базе данных, т.е. вы не получите 200 открытых (но, вероятно, бездействующих) подключений, потому что на одном хосте есть 200 разных пользователей.
  • База данных работает на другом сервере, к которому вы обращаетесь по сети.
  • (Одно) приложение очень часто обращается к базе данных


NO , не используйте постоянные соединения, если:

  • Вашему приложению нужно обращаться к базе данных всего 100 раз в час.
  • У вас есть много веб-серверов, обращающихся к одному серверу базы данных.
  • Вы используете Apache в режиме prefork. Он использует одно соединение для каждого дочернего процесса, что может довольно быстро увеличиваться.


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

Проблема в том, что в «конфигурации по умолчанию» MySQL разрешает только 1000 параллельных «открытых каналов». После этого новые подключения будут отклонены (эту настройку можно изменить). Итак, если у вас есть, скажем, 20 веб-серверов со 100 клиентами на каждом из них, и каждый из них имеет доступ только к одной странице в час, простая математика покажет вам, что вам потребуется 2000 параллельных подключений к базе данных. Это не сработает.

Следовательно: используйте его только для приложений с большим количеством запросов.


Original:
https://stackoverflow.com/questions/50303/persiste...
Ответ написан
Комментировать