8

Python で Web アプリを作成しています (Flask を使用)。SQLAlchemy や同様の ORM システムを使用するつもりはありません。むしろ、Psycopg2 を直接使用するつもりです。

新しいリクエストごとに新しいデータベース接続を開く必要がありますか(その後閉じますか?) または、これらの接続をプールするために何かを使用する必要がありますか?

4

5 に答える 5

10

PgBouncerは非常にきちんとしていて、アプリケーションとサーバーに対して透過的です。

PgBouncerを本番環境で2年間使用しており、問題は1つもありません。それはかなり素晴らしいPostgreSQL接続プールです。

http://wiki.postgresql.org/wiki/PgBouncer

于 2012-08-09T17:51:43.840 に答える
7

はい、接続プーリングは役立ちますが、データベースにかかる負荷に基づいて、ライブ接続またはプールサイズの適切な数値を見つける必要があります。

    from psycopg2.pool import SimpleConnectionPool
    from contextlib import contextmanager

    dbConnection = "dbname='dbname' user='postgres' host='localhost' password='postgres'"

    # pool define with 10 live connections
    connectionpool = SimpleConnectionPool(1,10,dsn=dbConnection)

    @contextmanager
    def getcursor():
        con = connectionpool.getconn()
        try:
            yield con.cursor()
        finally:
            connectionpool.putconn(con)

    def main_work():
        try:
            # with here will take care of put connection when its done
            with getcursor() as cur:
                cur.execute("select * from \"TableName\"")
                result_set = cur.fetchall()

        except Exception as e:
            print "error in executing with exception: ", e
于 2015-09-29T08:47:00.980 に答える
3

答えは、そのようなリクエストがいくつ発生するか、および Web アプリで同時にいくつが発生するかによって異なります。Web アプリが数百人、場合によっては数千人のユーザーが同時にログインしてビジー状態になることが予想される場合は、通常、接続プールを使用することをお勧めします。サイド プロジェクトとしてのみこれを実行しており、数百人未満のユーザーが予想される場合は、おそらく回避できます。プーリングなし。

于 2012-08-09T18:24:12.837 に答える
1

このアプリケーションが複数のクライアントに同時にサービスを提供する場合は、接続プーリングが最適だと思います。

于 2012-08-09T17:50:37.950 に答える