2012-08-09 9 views

risposta

9

PgBouncer è abbastanza pulito e trasparente per l'applicazione e il server.

Usiamo PgBouncer in produzione per 2 anni senza un singolo problema. È un pool di pool di PostgreSQL davvero fantastico.

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

1

Penso che il pool di connessioni sia la cosa migliore da fare se questa applicazione serve per più client e contemporaneamente.

2

La risposta dipende da come molte di queste richieste accadrà e quanti contemporaneamente nel vostro web app? Il pooling di connessioni è di solito un'idea migliore se si prevede che l'app Web sia occupata con 100 o anche 1000 di utenti connessi simultaneamente. Se si sta facendo solo questo come progetto parallelo e ci si aspetta meno di poche centinaia di utenti, è probabile che si possa andare via senza raggruppamento.

1

Sì, il pool di connessioni può essere d'aiuto, ma sì, è necessario trovare i numeri corretti per la connessione in diretta o la dimensione del pool in base al carico sul database.

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 
Problemi correlati