johnliv
@johnliv

Надо ли хранить pqxx::connection?

Добрый день!
Пишу небольшой игровой сервер на С++. Осваиваю pqxx... вопрос, может у кого был опыт.

Суть вопроса в том, надо ли (можно ли) хранить pqxx::connection? или надо создавать каждый раз перед запросом?

Суть
на оф. сайте есть пример:
{ 
    // это все в рамках scope!
    pqxx::connection c("dbname=zet host=localhost user=user password="); 
    pqxx::work txn(c);

    pqxx::result r = txn.exec(
      "SELECT * "
      "FROM tables "
      "WHERE room_id = 1");
      // ...
}


У меня есть класс, условный DBManager, для работы с БД. В нем есть метод DBManager::query(std::string query).

Теперь вопрос.
Создавать pqxx::connection c("dbname=zet host=localhost user=user password="); внутри scope этого метода или можно сохранить его в подключенном состоянии как член-класса, условный pqxx::connection m_connetion; ?
Если постоянно коннектиться, это может сильно сказаться на производительности?

Какие best practices для pqxx?
На оф. сайте не понятно, все примеры очень простые :(

Спасибо!
  • Вопрос задан
  • 1160 просмотров
Решения вопроса 1
terrier
@terrier
Создавать соединения постоянно, конечно, не надо. Пока вам достаточно одного соединения с базой можно хранить объект соединения. Для нескольких соединений нужен connection pool. Про его создание в документации libpqxx пишут, что
spoiler

If you want to have multiple concurrent transactions, let them work on different connections. An easy way to do this is to set up a connection pool: create a bunch of lazyconnection objects, all initialized with the same connection string. Connections of this type will set themselves up only when they are actually used, so there is no big cost to creating more than you're going to use.

В реальном продакшне для таких целей используют pgbouncer
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Создание соединения дорогостоящая операция, поэтому через одно соединение гоняют все запросы. Во всех известных мне библиотеках даже есть такое понятие как пул соединений.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы