1

是否有任何 C/C++ 库可用于 postgres 连接池?我看过 pgpool 更像是一个中间件。我正在寻找一个可以编码到我的应用程序中的库。

4

2 回答 2

2

没有一个好的应用内连接池库。几乎整个社区都使用外部代理,特别是pgbouncer由于其额外的运营优势。同时,SOCI 也有一个连接池,但它的使用范围几乎没有pgbouncer.

于 2011-06-28T18:19:57.553 回答
2

你看过libpqxx了吗?它本身不是一个连接池,但是它提供了一个 c++ API 来从应用程序代码中抽象连接处理。这允许应用程序非常容易地构建和管理自己的连接池。

这真的很简单,这里有一个例子(对 shared_ptr 和 pqxx 使用 boost)来说明一个池类,带有工厂方法。您可以想象 runQuery 方法将从指定的池中获取连接,并调用 pqxx API 以在底层连接上执行查询。然后它可以将连接返回到池。

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;

}
于 2012-06-27T15:48:00.730 回答