From: | Jorge Niedbalski <niedbalski(at)gmail(dot)com> |
---|---|
To: | Alvaro Herrera <alvherre(at)commandprompt(dot)com> |
Cc: | Teofilo Oviedo <teus79(at)active(dot)com(dot)py>, pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Programación en C |
Date: | 2007-07-19 00:44:45 |
Message-ID: | 469EB3FD.9000504@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Alvaro Herrera wrote:
> Jorge Niedbalski escribió:
>> Teofilo Oviedo wrote:
>
>>> Tengo un sistema hecho en C que debe quedar arriba durante las 24 hs.
>>> Y cada tres segundos entra en un bucle hecho en un while donde se
>>> consulta por medio de un SELECT si hay registros nuevos que procesar.
>>> Una vez que se haya verificado o procesado el/los registros se vuelve al
>>> bucle.
>> Primero piensa en migrar a una arquitectura de multihilos para controlar
>> los procesos concurrentes sobretodo si hablas de alto rendimiento, en
>> relacion a los sockets te recomendaria pensar en una solucion de
>> multiplexacion de los fd , puedes ver una libreria que lo hace muy bien
>> para el caso del servidor aqui
>> (http://nets.cl/public/sources/mplx2_02_2007.tar.gz) que usa eventos con
>> poll y select, te puede ayudar...
>
> Hmm, eso no necesariamente es buena idea con Postgres, porque no se
> puede mezclar una conexion con varios "lectores". Solo podrias
> compartir una conexion hacia Postgres cuando este "ociosa", es decir,
> ningun otro thread debe estar enviando una consulta o esperando un
> resultado.
>
> Lo mas sano es que cada proceso (o thread) mantenga su conexion por
> separado. De lo contrario es super dificil sincronizarlos
> correctamente; y cuando lo logras, el rendimiento es malo porque tienes
> que serializar el uso de la conexion.
Eso es cierto..
>
> Ahora si tuvieras MUCHOS (llamemoslo N) threads quizas valdria la pena
> tener VARIOS (llamemoslo M) conexiones, con M << N, y compartir las
> conexiones entre los procesos (siempre y cuando te asegures de dejar la
> conexion en un estado "limpio" despues de cada uso, es decir fuera de
> toda transaccion, etc). Pero creo que es dificil de hacer y
> probablemente lleno de bugs.
En realidad mas que dificil de hacer , pierde sentido para M << N ya que
solo validar las conexiones "limpias" implica mucho trabajo y bugs
probablemente que si...
>Si realmente llegaras a necesitar eso,
> lo que yo haria seria tratar las conexiones normalmente en la aplicacion
> (es decir una por thread) y usar un pooler intermedio, como PgPool o el
Interesante . Sabia que tenia que existir un pooler intermedio :P
Desconocia la existencia de PgPool (Me estoy adentrando en Postgres)..
> pooler de Skype (cuyo nombre se me escapa).
>
Saludos Alvaro!.
--
Jorge Niedbalski R.
- ElectroLinux I+I+D-
BSD Chile.
From | Date | Subject | |
---|---|---|---|
Next Message | FRANZ RICHARD MARIN VASQUEZ | 2007-07-19 05:24:26 | Variables Globales |
Previous Message | Alvaro Herrera | 2007-07-19 00:32:18 | Re: Programación en C |