Есть многопоточный сервер на с++, который работает с mysql базами. Проблема в том, что открытие одного соединения на одного клиента не подходит из-за большой нагрузки на сервер, а использование одного соединения с базой на все приложение чревато большими проблемами. Подскажите как решить эту проблему.
Ответ
Обычно в таких случаях используют пул соединений (connection pool). Суть его в том, что к базе открывается ограниченное число соединений (например, 10). Каждый раз, когда клиент пытается подключиться к базе, мы выдаём ему соединение из пула. После оекончания работы с базой (отсоединения клиента) соединение возвращается в пул, но не закрывается, а по приходу нового запроса отдаётся следующему клиенту. Плюсы такого подхода - не нужно тратить время на переоткрытие соединений с базой. Минусы - ограниченное число одновременных подключений к базе, сложности реализации. На вашем месте я бы не стал писать пул самостоятельно, а поискал бы готовые реализации в Интернете (сам я, к сожалению, не пользовался подобным в C++, поэтому ничего конкретного посоветовать не могу).
Комментариев нет:
Отправить комментарий