2011-06-28 22 views
1

postgres接続プーリングで使用できるC/C++ライブラリはありますか?私はミドルウェアのようなpgpoolを見てきました。私はアプリケーションにコード化できるライブラリを探しています。postgres接続プーリングライブラリ

+1

明確にするために、1つ以上のデータベースへの接続のリストを維持するものを探していますか?最も単純な答えは、 'PGconn *'の配列を使うことです。おそらく、コネクション・プーリングが伝統的にミドルウェアを参照しているので、必要なものが何であるかをより具体的に説明する必要があります。 – unpythonic

+0

はい、私はそれを正確に探しています。私はjavaのための[Apache DBCP](http://commons.apache.org/dbcp/)のようなものを考えていました。いったんプールを設定すると、接続の健全性をチェックしたり、接続が切断されたりするのを心配する必要はありません。プールはこれをすべて透過的に管理し、きれいなAPIを提示する必要があります。 – Vasu

答えて

2

良いアプリ内接続プーリングライブラリはありません。コミュニティ全体のほとんどは外部プロキシを使用しています。特に、追加の運用上のメリットのためにpgbouncerがあります。同じ呼吸では、SOCI has a connection poolですが、それはpgbouncerとほぼ同じくらい広く使われていません。

+0

私は自分のサーバーに新しいサービスやプロセスを導入する必要がないソリューションを探したかったのです。私は私自身のプールライブラリを書く必要があるように見えます。 [SQL Relay](http://sqlrelay.sourceforge.net/sqlrelay/)の使用についてのご意見はありますか? – Vasu

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; 

} 
+0

偉大な答えですが、お互いの質問に干渉しないように、接続を管理する必要はありませんか?私はPostgresに慣れていないので、すでに自動的に管理しているかどうかはわかりません。 –

関連する問題