библиотека пулов соединений postgres - PullRequest
1 голос
/ 28 июня 2011

Доступна ли какая-либо библиотека C / C ++ для пулов соединений postgres?Я посмотрел на pgpool, который больше похож на промежуточное ПО.Я ищу библиотеку, которая может быть закодирована в моем приложении.

Ответы [ 2 ]

2 голосов
/ 27 июня 2012

Вы уже смотрели libpqxx ?Сам по себе это не пул соединений, однако он предоставляет API-интерфейс c ++ для абстрагирования обработки соединения от кода приложения.Это позволяет приложению довольно легко создавать собственный пул соединений и управлять им.

Это действительно довольно просто, вот пример (с использованием boost для shared_ptr & pqxx) для иллюстрации класса пула с помощью фабричного метода.Вы можете представить, что метод runQuery получит соединение из указанного пула и вызовет API pqxx, чтобы выполнить запрос к базовому соединению.Затем он может вернуть соединение в пул.

class DbPool {
public:
    static db_handle_t create(const string &conn,
                              uint32_t max = DEFAULT_CON_MAX,
                              uint32_t min = DEFAULT_CON_MIN);

    static pqxx::result runQuery(db_handle_t pool,
                                 const string& query);

private:

    DbPool(const string& con, uint32_t max_cons,
           uint32_t min_cons);

    static boost::ptr_vector<DbPool> pool_;  // Keep a static vector of pools,

    pqxx::connection *createCon();
    void              releaseCon(pqxx::connection *c);
    uint32_t          initializeCons();
    pqxx::connection *getCon();

    boost::ptr_list<pqxx::connection> m_freeCons;

}
2 голосов
/ 28 июня 2011

В приложении нет хорошей библиотеки пулов соединений. Почти все сообщество использует внешние прокси, в частности pgbouncer, благодаря своим дополнительным эксплуатационным преимуществам. В то же время, SOCI имеет пул соединений , но он используется не так широко, как pgbouncer.

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